Я имею дело с некоторым упражнением, согласно которому мне нужно изменить строку, указанную на входе, в ту же строку, написанную заглавными буквами.
Вот моя попытка, по какой-то странной причине она печатает только первое слово строки, она не читает бит, который после пробела... Любые идеи, как его исправить?
#include <iostream>
#include <string>
using namespace std;
void uppercase(string str)
{
locale loc;
for(size_t i=0; i<str.length(); ++i)
{
cout << toupper(str[i], loc);
}
}
int main(void)
{
string text;
cout << "Input text, please: " << endl;
cin >> text;
uppercase(text);
}
Я знаю, что могут быть разные способы решения этого экстерсиса, но я хотел бы придерживаться своего метода. Любые возможные ошибки?
Конечно, используйте std::getline
чтобы получить целую строку вместо одного слова. Вы почти всегда должны использовать его, на самом деле, потому что линейная ориентация - это способ, которым большинство программ берут ввод.
Чтение из std::cin
ограничено пространством. Чтобы получить всю строку до новой строки, вам нужен std::getline
.
std::getline( std::cin, text);
void uppercase(string str)
{
locale loc;
for(size_t i=0; i<str.length(); ++i)
{
if(str[i] != " ")
{
cout << toupper(str[i], loc);
}
}
}
while (cin >> text) uppercase(text);
cin >> text;
останавливает обработку на первом пустом месте.