如何读有空格的名字
How to read names with space?
如果我有这样的数据:
Michael 30
Tom 35
我可以用下面的代码来处理它:
#include <iostream>
#include <string>
int main() {
std::string name;
int age;
while(std::cin >> name >> age) {
std::cout << name << " is " << age << " years old." << std::endl;
}
return 0;
}
但是如果我的数据看起来像这样:
Michael Corleone
30
Tom Hagen
35
我尝试使用这个代码,,但它只读取第一行,逻辑似乎应该读取所有行,所以我不知道为什么这个尝试失败。
#include <iostream>
#include <string>
int main() {
std::string name;
int age;
while(std::getline(std::cin, name) && std::cin >> age) {
std::cout << name << " is " << age << " years old." << std::endl;
}
return 0;
}
更糟糕的是,如果我的数据是这样的:
Michael Corleone 30
Tom Hagen 35
按照其中一个答案的建议,我可以通过将名称分为name1
和name2
来解决这个问题:
int main() {
std::string name1, name2;
int age;
while(std::cin >> name1 >> name2 >> age) {
std::cout << name1 + ' ' + name2
<< " is " << age << " years old." << std::endl;
}
return 0;
}
然而,这不是很好,如果有人有一个中间名,例如?
用这些数据看第二个例子:
Michael Corleone
30
Tom Hagen
35
问题是,在用std::cin >> age
读取age
后,行尾字符仍然留在流中,因此下面的std::getline
一无所获,因为它认为该行是空的(它是)。
诀窍是在读取每个新记录之前跳过空白:
std::string name;
int age;
while(std::cin >> std::ws && std::getline(std::cin, name) && std::cin >> age) {
std::cout << name << " is " << age << " years old." << std::endl;
}
或者更简洁地说:
std::string name;
int age;
while(std::getline(std::cin >> std::ws, name) >> age) {
std::cout << name << " is " << age << " years old." << std::endl;
}
这个怎么样?
#include <iostream>
#include <string>
int main() {
std::string firstname;
std::string lastname;
int age;
while(true){
std::cin >> firstname;
std::cin >> lastname;
std::cin >> age);
std::cout << firstname << " " << lastname << " is " << age << " years old." << std::endl;
}
return 0;
}
相关文章:
- 2D数组来自文本输入,中间有空格
- ifstream什么都没读
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 用C++快速读写文件
- Python中的for循环与C++有何不同
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 在一个读写器队列中,我可以用volatile替换原子吗
- 如何在c++中使用system()来运行包含空格的python脚本
- basic_string的前导/尾部不区分空格的特征
- 移除前面有空格的前2个字符串
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 使用空格分隔符从文本文件将对象读入数组
- 如何用C 中的文件中忽略空格读单词
- 如何将空格读作C++中的字符
- 如何读有空格的名字
- c++读带空格的字符串
- 读入具有任意数目空格的部分输入字符串