Не получается получить работу с вектором

Я работаю над упражнением, чтобы сохранить слова в <vector> из strings, затем преобразуйте все буквы в верхний регистр и напечатайте восемь слов в строке. Все отлично работает кроме 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;
}

1

Решение

Вы храните новую обновленную строку в 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);
2

Другие решения

Вы преобразовываете временную строку «слово» в верхний регистр, а затем отбрасываете ее.

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#

2

выражение word = i использовал конструктор копирования строки. word не тот в векторе.

0

Немного опоздал на вечеринку, но вот версия без дополнительного цикла.

for(auto &i : words)
std::transform(i.begin(), i.end(), i.begin(), ::toupper);
0
По вопросам рекламы [email protected]