[英]how can I copy some characters into string in c++
在代码的一部分中,我应该一个接一个地获得字符。 这很容易,但是我的问题是如何将这些字符一个接一个地添加到字符串中。 请注意,我不知道会得到多少个字符。 重要的是仅将字符复制为字符串。 换句话说,我想根据字符生成单词,直到字符不等于' '
或'\\n'
为止。 我写的错误代码是:
char c;
string str = NULL;
cin.get(c);
while (c != " ")
{
str += c;
cin.get(c);
}
cout << str ;
例如,如果字符c
首先是'H'
,然后是'i'
,则我希望字符串cout
在cout
上是"Hi"
!
=!
应该是!=
,字符串" "
应该是字符' '
。
如果要检查换行符和空格:
while (c != ' ' && c != '\n')
也许
while (!std::isspace(c))
它将读取最多任何空白字符。
您还应该检查流的结尾或其他问题:
while (cin.get(c) && !std::isspace(c)) {
str += c;
}
如果您只想阅读直到空格或换行符:
std::getline( cin, str, ' ' );
C ++ stringstreams建立字符串时也很有用
stringstream ss;
while (cin.get(c) && !std::isspace(c)) {
ss << c;
}
string s = ss.str();
cout << s;
代码中的错误是您没有检查换行符。 同样,它应该是!=
而不是=!
。 第二个选项在您的代码中实际上将表现为c = (!(" "))
。 另一个错误是您应该检查空格字符' '
而不是空字符串" "
。
这是正确的代码:
char c;
string str = "";
while (true)
{
cin.get(c);
cout << "c is " << c << endl;
if ((c == ' ') || (c == '\n'))
break;
str += c;
}
cout << str << endl ;
另外,如果您的要求是在遇到空格字符时停止I / O,请参考以下问题: C-在键入字符时从stdin读取
此处提出的所有解决方案将继续读取输入,直到输入换行符为止,因为在此之前,尚未处理您的输入,而是将其存储在缓冲区中。
如果您的str
开头为空,这很简单:
string str;
cin >> str; // cin's >> operator already reads until whitespace
cout << str;
如果您事先不知道它将有多少个字符,我将声明一个std :: list,将元素压入其中,然后将它们复制到字符串中。 这样可以确保您不会在每次添加时都重新分配字符串内存:
char c;
list<char> buff;
cin.get(c);
while (c != ' ' && c != '\n')
{
buff.push_back (c);
cin.get(c);
}
string str (buff.size(), 0);
size_t i = 0;
while (!buff.empty())
{
str[i] = buff.front();
buff.pop_front();
++i;
}
cout << str ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.