如何在c ++中将一些字符复制到字符串中

时间:2014-12-16 18:13:27

标签: c++ string copy character

在我的代码的一部分中,我应该逐个获取字符。这很容易,但我的问题是如何将这些字符逐个添加到字符串中。请注意,我不知道会得到多少个角色。 重要的是只在字符串中复制字符。换句话说,我想从角色生成单词,直到角色不等于' ''\n'。 我写的错误代码是:

 char c;
 string str = NULL;
 cin.get(c);
 while (c != " ")
 {
      str += c;
      cin.get(c);
 }
 cout << str ; 

例如,如果字符c最初为'H',然后为'i', 我希望"Hi"上的字符串str为cout

6 个答案:

答案 0 :(得分:4)

=!应为!=,字符串" "应为' '字符。

如果您想检查换行符和空格:

while (c != ' ' && c != '\n')

或者

while (!std::isspace(c))

将读取任何空格字符。

您还应该检查流的结尾或其他问题:

while (cin.get(c) && !std::isspace(c)) {
    str += c;
}

答案 1 :(得分:1)

如果您只想阅读空格或换行符:

std::getline( cin, str, ' ' );

答案 2 :(得分:1)

c ++ stringstreams在构建字符串时也很有用

stringstream ss;
while (cin.get(c) && !std::isspace(c)) {
    ss << c;
}
string s = ss.str();
cout << s;

答案 3 :(得分:0)

您的代码中的错误是您没有检查换行符。 此外,它应该是!=而不是=!。第二个选项实际上在代码中表现为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 - Reading from stdin as characters are typed

此处提出的所有解决方案将继续读取输入,直到输入换行符号为止,因为在此之前您的输入尚未处理,而是存储在缓冲区中。

答案 4 :(得分:0)

如果您的str空出来,这很简单:

string str;

cin >> str; // cin's >> operator already reads until whitespace

cout << str;

答案 5 :(得分:-1)

如果你事先不知道它会有多少个字符,我会声明一个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 ;