我必须编写一个遍历字符串的函数,找到任何大写字母并使它们小写。我决定添加一些代码来显示找到了哪些字母以及找到了多少字母。虽然在每次编译时,'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);
}
我确信我一定做错了循环,但无论问题是什么,我都找不到。
答案 0 :(得分:3)
变量cnt
在使用时永远不会初始化,更改
int cnt;
到
int cnt = 0;
答案 1 :(得分:3)
您无法初始化局部变量cnt
。使用未初始化的值会引发未定义的行为,基本上任何事情都可能发生。
使用int cnt=0;
并打开所有编译器警告。