C++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点

这篇具有很好参考价值的文章主要介绍了C++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点

<string>的getline()函数语法如下【https://cplusplus.com/reference/string/string/getline/】:

istream& 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++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点,C、C++学习,c++

 特别说明:C++中<iostream> 的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++中,空白字符通常用于分隔不同的数据项,而换行符用于标识一行的结束。了解和正确处理这些字符对于正确解析和处理用户输入以及生成正确格式的输出非常重要。】

需要注意的是,在C++中,有两种getline函数。第一种定义在头文件<istream>中https://cplusplus.com/reference/istream/istream/getline/ ;第二种定义在头文件<string>中https://cplusplus.com/reference/string/string/getline/ 。
<istream>中的getline()函数用于从输入流中读取一行文本,而<string>中的getline()函数用于从一个字符串中读取一行文本。

前面介绍的是<string>中的getline()函数。

下面介绍<istream>中的getline()函数:getline()函数是istream类的一个成员函数,可以从输入流(如cin)读取一行文本并存储到一个std::string对象中。它的函数原型为:

istream& getline (char* s, streamsize n, char delim );

参数说明:

s:表示指向字符数组的指针,其中提取的字符存储为 c 字符串。

n:指定了字符数组s的最大长度。

delim:可选参数,表示行的分隔符,如果不指定,默认为换行符('\n')。

<istream>中的getline()函数用于读取一行文本,存储到字符数组中。

例如:

#include <iostream>   
using namespace std;
 
int main()
{
	char name[256];
	cout << "Please input your name: ";
	cin.getline(name, 256); // 从标准输入读取一行文本
	cout << "The result is:  " << name << endl;
  
    return 0; 
}

运行之:

C++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点,C、C++学习,c++

附录
C++中两种getline函数用法还可参见 https://www.jb51.net/article/180289.htm文章来源地址https://www.toymoban.com/news/detail-670282.html

到了这里,关于C++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [JVM]String str1 = new String(“yhz“)和 String str2 = “yhz“ 的区别

    为什么str1== str2 就返回true,而str1==str3 就返回false?先看内存图解释 String str1=new String(“yhz”)和String str2=“yhz”,都会先去字符串常量池中查看是否已经存在“yhz”,如果存在则直接使用,如果不存在则会在字符串常量池中创建“yhz”。 String str1 = new String(“yhz”) 还会通过

    2024年02月16日
    浏览(46)
  • C++——IOStream

    C语言和C++,我们其实已经接触到了两个IO的概念 iostream,便是IO流,其中I表示in,O表示out, 代表着用户的输入和终端的输出 。在之前的C++语法中,我们都很少去考虑输入输出,而是直接用固定的测试用例来验证结果。但是对于大多数的程序都是传递给用户进行互动,IO流在实

    2024年01月24日
    浏览(29)
  • c++ getline()详解

    前言 getline()函数在c++中有两种用法,第一种定义在 i s t r e a m istream i s t r e a m 头文件中,第二种定义在 s t r i n g string s t r i n g 头文件中。getline()在这两种用法中都是用于读入一行字符串,可以带空格等特殊字符,在第二种用法中getline的第一个参数传的是 流 ,比如:cin和

    2024年02月03日
    浏览(37)
  • std::cin C++标准输入流

    用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又

    2024年02月08日
    浏览(62)
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(44)
  • C++ | cout与cin << >> endl 是什么意思

    C++的输入输出 使用C++输入输出更方便,不需要向printf、scanf输入输出时,那样需要手动控制格式 C++的输入输出是可以自动识别变量类型的。 cout和cin是全局的流对象 endl是特殊的C++符号,表示换行输出 他们都包含在头文件iostream头文件中 cout与cin的含义 Cout标准输出对象,是

    2024年01月25日
    浏览(36)
  • 使用pandas对数据提取时报错,AttributeError: Can only use .str accessor with string values!

    运行结果如下图        结果出现报错 这句话翻译成:属性错误:只能使用带有字符串值的 .str 访问器! 解决办法:用astype()转化数据类型 代码如下  这样便不会报错,运行结果如左图  

    2024年02月12日
    浏览(100)
  • json文件读取数据报错 AttributeError: ‘str‘ object has no attribute ‘items‘

    trans_width_table表如下:   源码 输出    原因:从json读取的数据是text类型,需要将其转化为列表,我这里用的是eval()函数。源码修改之后如下:  再次输出正确结果:    感谢大家的支持和关注!!  

    2024年02月12日
    浏览(40)
  • C++——类和对象3|日期类型|Cout运算符重载|Cin运算符重载|const成员|

    目录 日期类型  Date.h  Date.cpp  Test.cpp  实现Cout运算符重载  实现Cin运算符重载  根据日期算星期  修改后完整代码   Date.h  Date.cpp  const成员  取地址及const取地址操作符重载 习题  计算日期到天数转换     一个类到底可以重载哪些运算符,要看哪些运算符对这个类型有

    2023年04月13日
    浏览(58)
  • 【python】避免读取excel时的TypeError: unsupported operand type(s) for +: ‘float‘ and ‘str‘错误

    这个实际上是excel单元格为空的时候返回值为float类型的nan导致的错误。因为遇到的次数比较多,所以单独总结一下开一篇文章。 解决方法比较简单,主要是找到一个适用于字符型输入的nan判断函数。可以采用pandas库的isnull函数。 或者

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包