C++中cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点
在C++中,string类是标准库提供的字符串类,它可以帮助我们处理和操作字符串。它在<string>头文件中定义。string类提供了一系列成员函数和操作符,用于处理和操作字符串。string不属于STL(Standard Template Library)中的容器类,而是C++标准库(Standard Library)中的一个类,用于表示和操作字符串。
可以使用不同的构造函数(constructor)【注:在C++中,构造函数是一种特殊的成员函数,它在创建类的对象时被自动调用。构造函数的主要目的是初始化对象的数据成员】来创建不同的字符串。这些是一些常见的方法示例:
☆默认构造函数(无参构造函数):例如:
string str; //创建一个空的string对象。
string str = "Hello World!"; //创建一个的string对象并赋值初始化
☆带字符串参数的构造函数:创建一个string对象,并将其初始化为一个给定的字符串。例如:
string str("Hello");
☆带字符参数和个数的构造函数:创建一个string对象,并将其初始化为指定个数的相同字符。例如:
string str(5, 'a'); // str = "aaaaa"
☆拷贝构造函数:使用一个已有的string对象创建一个新的string对象。例如:
string str1("Hello");
string str2(str1); // str2 = "Hello"
你可以很方便地使用string类进行字符串的赋值、拼接、查找、替换等操作,而不需要手动管理内存或考虑字符串长度的限制。
赋值和拼接:可以使用=操作符进行字符串的赋值,也可以使用+操作符进行字符串的拼接。
访问字符:可以使用下标操作符[]来访问字符串中的单个字符,并可以修改它们。
字符串长度:使用length()或size()成员函数可以获取字符串的长度。
比较字符串:可以使用==、!=、<、>、<=、>=等操作符进行字符串的比较。
查找和替换:string类提供了find()、rfind()、replace()等成员函数,用于在字符串中查找指定的子串并进行替换。
【https://cplusplus.com/reference/string/ 或std::basic_string - cppreference.com 】
getline()函数语法如下:
getline (istream& is, string& str, char delim);
其中,is是输入流对象;str是目标字符串对象;delim是可选参数,表示定界符(分隔符,默认为换行符'\n')。
使用getline()函数时,它会从输入流中读取一行文本,并将读取到的内容存储到目标字符串str中,直到遇到定界符(或文件结尾)为止。如果指定了定界符delim,则getline()函数会在遇到该字符时停止读取,否则默认为换行符。
例子
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cout << "请输入名字:";
getline(cin, str); //cin >> str;
// 检查字符串是否为空
if (str.empty()) {
cout << "The string is empty." << endl;
} else {
cout << "The string is not empty." << endl;
}
return 0;
}
运行效果:
特别说明:c++中,cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点:
数据类型不同:cin >> str是用来读取字符串类型的单个单词或数字型数据(整数、实数等),而getline(cin, str)则是用来读取整行的字符串。
分隔符:使用cin >> str时,输入被空白字符(如空格、制表符、换行符)分隔为不同的字符串,并将第一个非空白字符开始的连续字符序列存储到str中,剩余部分将会留在输入队列中;而getline(cin, str)则会读取整行输入,包括空白字符,在遇到换行符之前将其存储到str中。
输入限制:cin >> str只能读取到空白字符之前的内容,因此无法读取含有空格的字符串,一次只能读取一个单词或数字。而getline(cin, str)可以读取包含空格的完整行,因此可以读取多个单词或整行文本。
换行符处理:cin >> str读取后会将换行符留在输入流中,可以影响下一次读取操作。相比之下,getline(cin, str)会将换行符从输入流中移除,以防止影响后续读取操作。
【空白字符是指在文本中没有可见形式的字符,主要包括空格、制表符和换行符。它们在文本处理中具有不同的作用。
空格(Space):表示一个可见的空间,在文本中起到分隔单词或字符的作用。多个连续的空格会被视为一个空格。
制表符(Tab):通常用\t来表示,在文本中占据一个固定的宽度,经常用于对齐文本中的内容。
换行符(Newline):表示换行的特殊字符,在不同的操作系统中可能有不同的表示方式。在Unix和Linux系统中,换行符用\n表示;在Windows系统中,换行符由两个字符组成,即回车符(Carriage Return)和换行符,用\r\n表示。
这些空白字符在输入和输出操作中都需要注意处理。在C++中,空白字符通常用于分隔不同的数据项,而换行符用于标识一行的结束。了解和正确处理这些字符对于正确解析和处理用户输入以及生成正确格式的输出非常重要。】