2013-08-19 3 views
1

Я работаю над упражнением для хранения слов в <vector> из string s, а затем конвертирует все буквы в верхний регистр и печатает восемь слов в строке. Все работает отлично, кроме части кода toupper(). Здесь все это:Не могу получить 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

Добро пожаловать в Переполнение стека. Для получения наилучших ответов на вопросы, вы всегда должны попробовать и опубликовать [sscce] (http://sscce.org/), что вы ожидаете от вывода/поведения и того, что вы видите/поведение, которое вы видите. Если у вас возникла ошибка компиляции, отправьте сообщение об ошибке компилятора. http://stackoverflow.com/questions/how-to-ask – kfsone

+0

Я раньше не сталкивался. Я сделаю это в будущем, спасибо. – spartanhooah

ответ

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); 
2

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

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#

0

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

0

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

for(auto &i : words) 
    std::transform(i.begin(), i.end(), i.begin(), ::toupper); 

 Смежные вопросы

  • Нет связанных вопросов^_^