我正在练习在<vector>
string
s中存储单词,然后将所有字母转换为大写,并在每行打印8个单词。除了我的代码的toupper()
部分之外,一切正常。这一切都是:
vector<string> words;
string theWords;
string word;
while(cin >> word)
words.push_back(word);
for(auto &i : words) {
word = i;
for(auto &j: word)
j = toupper(j);
}
int k = 0;
for(auto i : words) {
cout << i << " ";
++k;
if(k % 8 == 0)
cout << endl;
}
答案 0 :(得分:2)
您要在word
中存储新的更新字符串,但是您应该更新i
更改此
for(auto &i : words) {
word = i;
for(auto &j: word) // word is updated, but your vector is not
j = toupper(j);
}
......对此:
for (auto &i : words) // for every string i in words vector
for (auto &j : i) // update your i, not word
j = toupper(j);
答案 1 :(得分:2)
您正在将临时字符串“word”转换为大写字母,然后将其丢弃。
string word;
for(auto &i : words) {
word = i; <<-- here
for(auto &j: word)
j = toupper(j);
}
您需要做的是
for(auto &i : words) {
for(auto &j: i)
j = toupper(j);
}
答案 2 :(得分:0)
表达式word = i
使用了字符串复制构造函数。 word
不是向量中的那个。
答案 3 :(得分:0)
派对有点晚了,但这里是没有额外循环的版本。
for(auto &i : words)
std::transform(i.begin(), i.end(), i.begin(), ::toupper);