C++字符串的小细节

C++的字符串问题

char 为字符数组
当存入相应的字符时,会分解成一个个的字符存进数组

char A[5] = {"H","e","l","l","o"};
//当想存Hello的时候在字符数组里会拆成一个个的字符生成,5为数组长度

当如果你想存字符串时,可用char*
char *为字符串数组

char* A[3] = {"Hello","the", "same"};
/*当加上星号后,数组里存的不是Hello,the和same,而是这三个字符串
的第一个字符的地址,而这个字符串又是由字符数组组成的。因为在地址里
是连续的,所以能读取整个Hello,the,same,所以可以变相就变成了字
符串数组
*/

C++输入字符问题

scanf输入字符用的是%c,%s,
当使用%s时

char str[10];
scanf("%s",str);
printf("%s",str);

输入`

QAQ QAQ QAQ

显示

QAQ

识别空格作为字符串的结尾

讨论gets_s和scanf和getchar的区别

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	char a[10], b[10];
	char c, d;
	scanf("%s", a);
	printf("a中保存的字符串为:%s\n", a);

	c = getchar();
	printf("c中保存的字符为:%c ", c);
	//此行没有换行符检测是否接受了输入缓冲区的

	gets_s(b);
	printf("b中保存的字符串为:%s\n", b);

	d = getchar();
	printf("d中保存的字符为:%c", d);

	return 0;
}

输入asdf再输入as df 得到结果

结论:
scanf识别空格或者enter或者tab作为字符串的结尾,并且空格仍然在输入缓冲区里
getchar()可以接受单个字符它收到了scanf的空格\n,所以它换行了
gets_s可以接受空格,tab它识别enter(\n)作为结束标志。

sscanf 和sprintf的作用

scanf(screen,"%d",&n);
print(screen,"%d",n);

scanf本质是从屏幕输入拿到数后将其转变为%d的格式给n
print本质是从从n中拿到数将其转变为%d的格式发送给屏幕

sscanf(str,"%d",&n);
sprint(str,"%d",n);

sprintf可以将屏幕变成字符数组或者字符串数组,相当于把数输进了字符串数组中。
scanf同理将字符串的数组的数给导出。

发布了19 篇原创文章 · 获赞 4 · 访问量 502

猜你喜欢

转载自blog.csdn.net/qq_35050438/article/details/103201335