-2

我必须编写一个函数来遍历一个字符串,找到所有存在的大写字母并将它们变成小写。我决定添加一些代码来显示找到了哪些字母以及找到了多少。尽管在每次编译中,'cnt' 的值都会产生荒谬的结果。

#include <iostream>
#include <vector>
using namespace std;

int upper(string s) {
    int cnt;

    vector<char> v{};
    for (auto& i : s) {    
        if (isupper(i)) {
            v.push_back(i);
            i = tolower(i);
            ++cnt;
        }
    }
    cout << "new string is '" << s << "'\n"
         << "number of capitals found is " << cnt << "\n"
         << "letters found were ";
    for (auto l : v)
        cout << l << " ";
    return 0;
}

int main() {
    string l = "This IS a TeSt";
    upper(l);
}

我确定我一定在循环中做错了什么,但无论问题是什么,我都找不到它。

4

2 回答 2

3

变量cnt在使用时从不初始化,更改

int cnt;

int cnt = 0;
于 2014-08-11T02:33:19.950 回答
3

您未能初始化局部变量cnt。使用未初始化的值会引发未定义的行为,基本上任何事情都可能发生。

使用int cnt=0;并请打开所有编译器警告。

于 2014-08-11T02:33:55.580 回答