MST

星途 面试题库

面试题:C++中string类的输入输出常见问题

在C++中,使用string类进行输入输出时,当遇到输入包含空格的字符串,用`cin`和`getline`分别会有什么不同的表现?请举例说明,并阐述如何正确使用`getline`从输入流中读取包含空格的字符串。
39.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. cingetline在输入包含空格字符串时的不同表现
    • cincin在读取输入时,遇到空格、制表符或换行符就会停止读取。例如:
#include <iostream>
#include <string>
int main() {
    std::string str;
    std::cout << "请输入字符串:";
    std::cin >> str;
    std::cout << "你输入的字符串是:" << str << std::endl;
    return 0;
}

假设输入hello worldcin只会读取到hello,因为遇到空格就停止了。

  • getlinegetline会读取整行,直到遇到换行符(换行符会被读取并丢弃),因此可以读取包含空格的字符串。例如:
#include <iostream>
#include <string>
int main() {
    std::string str;
    std::cout << "请输入字符串:";
    std::getline(std::cin, str);
    std::cout << "你输入的字符串是:" << str << std::endl;
    return 0;
}

若输入hello worldgetline会完整读取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;
}