写了一个函数,想实现读取一个字符串中特定的内容(如下规定),计算出最值后返回字符串,但是现在只能输出乱码呜呜,求大佬看看哪里出错了
题目/*
6.表达式分析
输入一个表达式,对表达式进行分析,并且给出计算结果。例如:输入 4 + 2.2 * 3 =,输出 10.6。
要求:
(1)支持优先级、四则混合运算与括号;
(2)支持正负号、取余、次方等运算符;
(3)支持常用数学函数,包括幂函数、三角函数、指数函数、对数函数、双曲函数等;
(4)支持不定参数函数,如 max 和 min。(选做)
*/
*/
/本程序中,定义M{x,y,z}格式为求最大值,m[x,y,z]为最小值,
为不影响主体进行(因为水平十分有限不知道能不能写出来这部分)
总体思路为将包含M的完整字符串在此程序中独立运行,再将去掉M的字符串返还给主体。
同时,这种思路导致了max计算极大的局限性,例如此程序只能实现正整数的大小比较,
而无法实现主体中的运算、优先级和调用函数(甚至不支持小数和负数)
甚至只能处理串中只出现一次M/m的情况(主要还是能力不行呜呜)
并且其中有很多看起来可能多此一举的思路与步骤(还是能力有限)
只能说是实现了求一个串里不知道多少个数的大小比较而全无此题目的,
总归还是几天几夜思考的结果,就算不能动也还是,看看吧/
#include
#include
using namespace std;
//计算最大值
int M(int a[]) {
int i = 0;
int q = 0;
while (a[i] != '\0') {
int p = a[i];
i++;
if (p >= q)q = p;
}
return q;
}
//计算最小值
int m(int a[]) {
int i = 0;
int q = 0;
while (a[i] != '\0') {
int p = a[i];
i++;
if (p <= q)q = p;
}
return q;
}
//调用该函数可去掉输入字符串中唯一的M
char* reM(char cha[], char aa[]) {
char ch[101]; //输入的原始字符串
char a[101]; //返还的字符串
int num[100] = { 0 }; //M的参数
cin.getline(ch, 100); //读取完整字符串
int j = 0; //返还串下标
int k = 0; //数组下标
for (int i = 0; ch[i] != '\n'; i++) {
for (j = 0; ch[i] != 'M'; j++)a[j] = ch[i]; //读到M之前的全保存
if (ch[i] == 'M') {
if (ch[i + 1] == '{') {
while (ch[i + 2] != '}') { //读到后括号之前,其中数字存入数组
if (ch[i + 2] >= 48 && ch[i + 2] <= 57) {
num[k] = ch[i + 2] - 48;
i++; //若是数字,存入数组,识别下一位
while (ch[i + 2] >= 48 && ch[i + 2] <= 57) {
num[k] = num[k] * 10 + (ch[i + 2] - 48);
i++; //若仍是数字,拼数字存入数组,识别下一位
}
k++; //数组下标加一
if (ch[i + 2] != ',')i++; //若是逗号,串下标加一,不存入数组
}
}
}
else cout << "error";//(没什么用)若M后不是“{”,报错
num[k] = '\0'; //让求值函数有可识别终止符(大概?
int b = M(num);//求值
//拆分最大值
int count = 0;//位数
int temp, power;
while (b != 0) {
b = b / 10;
count++;
}//判断位数
for (int l = 1; l <= count; l++) {
power = pow(10, count - l);
temp = b / power;
a[j] = temp;//顺次每一位存入数组
b = b % power;
j++; //数组序号加一
break;
}
}
//闹不机明自己咋循环的了!!!!没法继续存了!!!!救命!!!!
for (i = i + 2; ch[i] != '\n'; i++)
for (j = 0; ch[i] != '\n'; j++)a[j] = ch[i];
return a;
}
你的代码发的太乱了
把你的代码用代码段</>的文本形式重新发一下,