Я работаю над упражнением, чтобы сохранить слова в <vector>
из string
s, затем преобразуйте все буквы в верхний регистр и напечатайте восемь слов в строке. Все отлично работает кроме 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;
}
Вы храните новую обновленную строку в 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);
Вы преобразовываете временную строку «слово» в верхний регистр, а затем отбрасываете ее.
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);
}
Живая демо здесь: http://ideone.com/pwQBQr#
выражение word = i
использовал конструктор копирования строки. word
не тот в векторе.
Немного опоздал на вечеринку, но вот версия без дополнительного цикла.
for(auto &i : words)
std::transform(i.begin(), i.end(), i.begin(), ::toupper);