我正在尝试在堆栈中转换我的数字串,但我不明白为什么当数字为负时,第一个元素总是-3
。
void Soma::StrToInt(char str1[], char str2[]) {
for (int i = 0; str1[i] != '\0'; i++) {
if (str1[0] == '-') { //if is negative
negative1 = true;
}
p1.push(str1[i] - '0');
cout << p1.top() << endl;//Always showing the first element == -3
}
for (int i = 0; str2[i] != '\0'; i++) {
if (str1[0] == '-') {
negative2 = true;
}
p2.push(str2[i] - '0');
}
}
完整代码太大,无法在此处发布,问题是为什么会出现-3
值,当我的字符串为否定时,例如-500
,-9514897654654
或任何负数。< / p>
最小版本:
int main() {
char str1[] = { '-','4','0','0' };
stack<int> p1;
for (int i = 0; str1[i] != '\0'; i++) {
p1.push(str1[i] - '0');
cout << p1.top() << endl;
p1.pop();
}
}
答案 0 :(得分:0)
这里的问题是p1.push(str1[i] - '0');
尝试从'0'
中删除'-'
,如果字符串包含负数,因为您始终以i = 0
开头。您需要做的是在循环之前检查字符串是否为否定,然后根据该检查从0
或1
开始。你可以有像
void Soma::StrToInt(char str1[], char str2[]){
int start = 0;
if(str1[0] == '-'){ //if is negative
negative1 = true;
start = 1;
}
for(int i=start; str1[i]!='\0'; i++)
//...
}
现在,如果字符串为负数,您将跳过字符串中的'-'
并按下数字。