C++中两种字符串的读入和输出

字符串在C++有字符数组和string类两种存在方式,他们的读入和输出方式略有差别,且在读入时,有按行读入和遇空白符终止读入两种形式。

字符数组

  •   scanf()读入,老朋友了,遇到空白符会终止读入。
#include<cstdio>

int main()
{
	char str[100];
	scanf("%s", str);
	puts(str);
	return 0;
}
  • cin读入,遇到空白符会终止读入。 
#include<cstdio>
#include<iostream>

int main()
{
	char str[100];
	std::cin >> str;
	puts(str);
	return 0;
}
  • fgets()读入 ,第一个参数为字符数组的首地址,第二个参数为包括'\0'在内最多可读字节数,第三个参数为文件名(stdin),属于按行读入。

#include<cstdio>

int main()
{
	char str[100];
	//gets已经被淘汰了
	fgets(str, sizeof(str), stdin);
	puts(str);
	return 0;
}

 fgets因换行停止读入字符串时,会在字符串末尾添加'\n'和'\0',若因遇到EOF停止读入,则只会添加'\0'不会添加'\n',所以用的时候可能会产生奇怪的bug。

  • cin.getlin()读入,第一个参数为字符数组的首地址,第二个参数为包括'\0'在内最多可读字节数,属于按行读入。
#include<cstdio>
#include<iostream>

int main()
{
	char str[100];
	//该函数在iostream库中
	std::cin.getline(str, 100);
	puts(str);
	return 0;
}
  • 输出字符数组的函数有cout,puts(),printf()三种,使用puts()输出会自动最末尾换行。

string类

  • cin读入,遇到空白符会终止读入。 
#include<iostream>

int main()
{
	std::string str;
	std::cin >> str;
	std::cout << str;
	return 0;
}
  • getine()读入,第一个参数我也不懂,第二个参数为变量名,属于按行读入。
#include<iostream>
#include<string>

int main()
{
	std::string str;
	//该函数在string库中
	std::getline(std::cin, str);
	std::cout << str;
	return 0;
}

cin不会读入回车和空白符,故而会把他们留在缓冲区,如果把cin与其他函数混用(如scanf()、getline()等),可能会有bug,记得清空缓冲区。

  •  输出string类可以能用cout,且不会在最末尾处换行;或者调用其成员函数c_str(),视为字符数组输出。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值