如何在 C++ 中将一些字符复制到字符串中
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'
,我想把字符串 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 ;
相关文章:
- 在这种情况下,我真的复制了字节还是复制了字符?
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 使用动态分配将 char* 复制到另一个字符**
- 库达如何将字符**从内核复制到主机
- 将字符向量复制到另一个向量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 将字符数组复制到 QByte 数组中,而无需传递指针
- 为什么我的代码在尝试复制字符数组时引发 C6386 错误?
- 使用 strcpy_s 将字符串复制到字符*
- 字符* 复制到另一个字符* 运行时错误
- C 内联汇编试图将STD :: String的字符复制到寄存器中
- 如何将 (ICU4C) Unicode 字符串逐个字符复制到另一个 Unicode 字符串
- 将第一个n个字符复制到std :: string
- 将无符号字符*复制到无符号字符
- 如何在 C++ 中将一些字符复制到字符串中
- 从未签名字符复制到无符号字符
- 您好,我想将一个字符复制到 2D 数组,但第二个字符会擦除第一个字符
- 将分配有 malloc 的字符 * 复制到 std::string
- 如何在c++中进行反向字符复制
- 如何将字符复制到字符数组