1.cin:
getline(cin, s);
当读取字符串时,遇到空格、制表符或换行符会停止读取。
不会将换行符(\n)包含在读取的字符串中,而是将其留在输入流中。
2.scanf:
scanf("%99s", s);
遇到空格、制表符或换行符会停止读取。
保留换行符,不会将其包含在读取的字符串中。
3.getline:
getline(cin, s);
是C++标准库中的函数,用于读取一行文本。
可以读取包括空格在内的整行文本,直到遇到换行符。
默认情况下,换行符会被包含在读取的字符串中,但可以通过指定结束符来改变这一行为。
4.gets:
gets(input); // 不推荐使用,可能导致缓冲区溢出
是C语言标准库中的函数,用于读取一行文本。
类似于getline,可以读取包括空格在内的整行文本,直到遇到换行符。
换行符会被包含在读取的字符串中。
不安全:由于不检查目标缓冲区的大小,可能导致缓冲区溢出,因此不建议使用。
5.fgets:
fgets(input, sizeof(input), stream); // 注意限制输入长度
// 如果fgets读取了换行符,需要手动移除
input[strcspn(input, "\n")] = 0; // 移除换行符
是C语言标准库中的函数,用于从文件流(如FILE*指针)读取一行文本。
类似于gets,可以读取包括空格在内的整行文本,直到遇到换行符或文件结束。
换行符会被包含在读取的字符串中,并且会在字符串末尾添加空字符(\0)。
补充: strcspn
函数用于在一个字符串中找到第一个不包含在另一个字符串中的字符的位置。它返回从第一个字符开始,连续多少个字符与指定字符串中的字符不同。这个函数在处理字符串时非常有用,尤其是在需要忽略特定字符集的情况下。