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

how can I copy some characters into string in c++

本文关键字:字符 复制 字符串 C++      更新时间:2023-10-16

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

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

例如,如果字符c首先'H',然后'i',我想把字符串 str "Hi"cout上!

=!应该是!=,字符串" "应该是字符' '

如果要检查换行符和空格:

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

或者也许

while (!std::isspace(c))

这将读取任何空格字符。

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

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

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

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

C++ 字符串流在构建字符串时也很有用

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

如果您的str开始时为空,这很简单:

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

代码中的错误是没有检查换行符。此外,它应该是!=而不是=!.第二个选项实际上将表现为代码中的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 读取

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

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