以下代码的输出为0。我不知道为什么。 (我知道我已经在此代码块中问过有关编译器错误的问题。现在它正在运行,但不能正常工作。)

有人有主意吗?还是有更好的方式编写我的str2Int函数?应该采用类似“ 2833812”的字符串并将其转换为int 2833812。

#include <iostream>
#include <map>
#include <math.h>

const char digit_ints[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
std::map<char,int> digit_map;


int str2Int(const std::string& S) {
    int sz(S.size()), sum(0);
    if (sz == 0) {
        std::cout << "str2Int() cannot take an empty string as a parameter." << std::endl;
        return -1;
    } else {
        int sum(0);
        for (int j(0), k(sz - 1); j < sz; ++j, --k) {
            if ((S[j]) < '0' || (S[j]) > '9') {
                std::cout << "str2Int can only take strings with chars '0' through '9' as parameters." << std::endl;
                return -1;
            } else {
                sum += digit_map[S[j]] * (int)pow(10.0, k);
            }
        }

    }
    return sum;
}


int main() {

    for (int i = 0; i < 10; ++i)
    digit_map.insert(std::pair<char,int>(digit_ints[i], i));


    std::cout << str2Int("3421");

    return 0;
}

最佳答案

删除此行

int sum(0);


在else块中,您正在创建一个新的sum变量,该变量的作用域是else块,该else块“隐藏”了外部范围的sum变量。您正在从外部范围返回sum变量。

关于c++ - 无法弄清楚为什么我的str2Int函数返回0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20723565/

10-11 16:03