将字符串转换为stack-int-value,当为负时,会导致奇怪的值

时间:2016-10-21 13:08:58

标签: c++

我正在尝试在堆栈中转换我的数字串,但我不明白为什么当数字为负时,第一个元素总是-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();
    }
}     

1 个答案:

答案 0 :(得分:0)

这里的问题是p1.push(str1[i] - '0');尝试从'0'中删除'-',如果字符串包含负数,因为您始终以i = 0开头。您需要做的是在循环之前检查字符串是否为否定,然后根据该检查从01开始。你可以有像

这样的东西
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++)
    //...
}

现在,如果字符串为负数,您将跳过字符串中的'-'并按下数字。