我正在处理一些练习,根据这些练习,我必须将输入上给出的字符串更改为相同的字符串,用大写字母书写。
这是我的尝试,由于一些奇怪的原因,它只打印出字符串的第一个字,它不会读取空格后的位... 任何想法如何解决它?
#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);
}
我知道可能有不同的方法来解决这个问题,但我想坚持我的方法。任何潜在的错误?
答案 0 :(得分:4)
当然,使用std::getline
获取整行而不是一个单词。实际上,你应该总是使用它,因为面向行是大多数程序输入的方式。
答案 1 :(得分:1)
从std::cin
读取是以空格分隔的。为了使整个字符串更新到新行,您需要std::getline
。
std::getline( std::cin, text);
答案 2 :(得分:0)
void uppercase(string str)
{
locale loc;
for(size_t i=0; i<str.length(); ++i)
{
if(str[i] != " ")
{
cout << toupper(str[i], loc);
}
}
}