面试题答案
一键面试cin
和getline
在输入包含空格字符串时的不同表现:cin
:cin
在读取输入时,遇到空格、制表符或换行符就会停止读取。例如:
#include <iostream>
#include <string>
int main() {
std::string str;
std::cout << "请输入字符串:";
std::cin >> str;
std::cout << "你输入的字符串是:" << str << std::endl;
return 0;
}
假设输入hello world
,cin
只会读取到hello
,因为遇到空格就停止了。
getline
:getline
会读取整行,直到遇到换行符(换行符会被读取并丢弃),因此可以读取包含空格的字符串。例如:
#include <iostream>
#include <string>
int main() {
std::string str;
std::cout << "请输入字符串:";
std::getline(std::cin, str);
std::cout << "你输入的字符串是:" << str << std::endl;
return 0;
}
若输入hello world
,getline
会完整读取hello world
。
2. 正确使用getline
从输入流中读取包含空格的字符串:
getline
函数有多个重载版本,常用的形式为getline(std::istream& is, std::string& str)
,其中is
是输入流对象(如std::cin
),str
是用于存储读取到字符串的std::string
对象。示例代码如下:
#include <iostream>
#include <string>
int main() {
std::string line;
std::cout << "请输入包含空格的字符串:";
std::getline(std::cin, line);
std::cout << "读取到的字符串是:" << line << std::endl;
return 0;
}
这样就能正确读取包含空格的字符串。需要注意的是,如果之前有使用cin
读取其他数据类型,可能会在输入流中留下换行符,导致getline
读取到空字符串。这种情况下,可以在getline
之前使用cin.ignore()
来忽略输入流中的换行符,示例如下:
#include <iostream>
#include <string>
int main() {
int num;
std::string line;
std::cout << "请输入一个数字:";
std::cin >> num;
std::cin.ignore();//忽略输入数字后的换行符
std::cout << "请输入包含空格的字符串:";
std::getline(std::cin, line);
std::cout << "读取到的字符串是:" << line << std::endl;
return 0;
}