【C++ 学习】字符串:字符串处理函数(输入输出函数)

字符串处理函数

C++中基本的字符串函数,包括字符串输入函数(fgets,gets_s),输出函数(fputs),字符串比较(strcmp,strncmp)、复制(strcpy,strncpy),长度(strlen)等函数。

字符串输入输出函数

C++作为一个比较基础的语言,在字符串输入输出上,可能并不如python那么简单。

分配空间

使用字符串第一件事情是分配空间,声明并初始化的时候,不需要指明字符串空间大小,如果声明,但不初始化,就要指明字符串空间大小。

\\两种常见的声明定义方式
char str1 [] = "Hello, C++";
char str2[80];

字符串输入函数

  • gets()函数
    gets()函数:简单易用,其功能是读取整行输入,直到遇到换行符。
//gets(words);  //使用gets函数会在VS2022编译过程报错

然而,gets()函数在C11 标准中已经被废除,原因在于gets()函数只有一个参数word,其不会检查字符串数组是否装得下输入信息,如果输入信息过长,gets()函数的字符串数组只能够装一部分信息,剩下的输入可能会入侵到内存的其余空间,擦除原本的数据造成程序错误。

  • fgets()函数
    fgets()函数有三个参数,它通过第二个参数限制读入数据的字符数来解决溢出问题,只读入指定数量字符。此外,fgets()函数读到一个换行符,会把它存储在字符串中。fgets()函数的第三个参数需要指明读入的文件,如果从键盘输入则以stdin作为参数。
void Showfgets(void) {
	char words[STRLEN];
	puts("Enter a string plz:");
	fgets(words, STRLEN, stdin);
	printf("The string: (puts and fputs):\n");
	puts(words);
	puts("Enter a string plz:");
	fputs(words, stdout);
	// 超过STRLEN的长度,fgets函数只读入STRLEN长度
	fgets(words, STRLEN, stdin);
	printf("The string: (puts and fputs):\n");
	puts(words);
	fputs(words, stdout);
}

从键盘输入的标准输入信息,超过长度的输入的信息会被保留在缓冲区中。fgets()函数可以接着读取。

  • gets_s()函数

C11标准中新加了gets_s()函数,它与fgets函数有些不同

  1. gets_s()函数只从标准输入中读取数据,所以不需要第三个参数
  2. 如果gets_s()函数读到换行符,会丢弃它而不是存储它。
  3. 如果gets_s()函数读到最大字符数时还没有读到换行符,则会把目标数组中的首字符设置为空字符,读取并丢弃随后的输入值,直到换行符或文件末尾,然后返回空指针。

gets()函数在C11标准中已被废除,它存在擦写现有数据的风险。

  • scanf()函数
    scanf()函数需要用%s来读取字符串,并且在第一个空格处停止读入,scanf()函数更像是获取单词的函数,而不是字符串的函数。%10s,即%+数字+s的形式,来获取指定长度的字符数量。

  • cin
    C++ 中的cin是C++中比较简单也好用的输入方法,该方法从标准输入(键盘)获取信息,读入到指定的空间中。

字符串输出函数

大部分字符串输出函数使用都比较简单

  • puts()函数
    puts()函数只需输入字符串的地址作为参数即可。
    puts()函数在显示字符串时会自动地在其末尾添加一个换行符。

  • fputs()函数
    fputs()函数是puts()函数的文件定制版,它与puts()函数不同之处在于:

  1. fputs()函数的第2个参数指明要写入数据的文件,如果在屏幕上显示则使用stdout作为参数。
  2. fputs()函数不会在输出的末尾添加换行符。
    注意:fgets()函数在读到换行符时会保留换行符
  • printf()函数
    printf()函数输出比较随意,更加自由,而且不会在每个字符串末尾加上一个换行符。

  • cout
    C++中的一种输出方法,输出到屏幕显示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUNX-T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值