我有这个C++代码(我将在下面解释):
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
int main()
{
// part 1
cout << "Write many words separated by either newlines or spaces:"<< endl;
string word;
vector<string> v;
while(cin >> word){
if(word == "quit"){
break;
}
else{
v.push_back(word);
}
}
//part 2
for(string x:v){
for(char &j:x){
j = toupper(j);
}
}
//part 3
for(string x:v){
cout << x << endl;
}
return 0;
}
我正在尝试做的是获取一系列字符串并将字符串中的每个字符转换为大写并输出字符串。我想在研究它时使用向量。在第 1 部分中,我从标准输入中获取字符串并将它们存储在字符串向量中。我写"quit"来打破循环,开始将每个字符串中的字母大写。显然,问题出在第 2 部分。我想做的是这样的:1-在我们循环时获取一个字符串。2 一旦我们有一个字符串,在该字符串中获取一个字符并将其转换为大写。对所有角色执行此操作。3-对所有字符串执行此操作。
当我编译它时,除了大写的字符串之外,我都正确。我真的很困惑D:
for(string x:v){
for(char &j:x){
j = toupper(j);
}
}
通过引用从字符串中取出每个字符,但按值获取字符串。尝试
for (string& x : v){
// […]
}
请注意,使用 C++1Z,我们将能够使用基于范围的简洁 for 循环,使生活变得更加轻松:
for (x : v) { // Captures by reference automatically
// […]
}