c语言字符数组和字符串以及fgets,gets,puts,fputs,strlen函数

字符数组:

char str[5] = { 'h','e','l','l','o' };

字符串:

char str[6] = { 'h','e','l','l','o','\0' };

char str[]="hello";

printf("%s",str);         //使用printf打印字符串的时候,必须碰到\0结束

给\0的位置留出来,否则无法正常打印

	char str[11] = {0};

	for (size_t i = 0; i < 10; i++)
	{
		scanf_s("%c", &str[i]);
	}
	
	printf("str=%s\n",str);

如果str赋值内存10,输入helloworld则会输出乱码

 练习:统计用户输入每个字母的出现次数

	char str[11] = {0};

for (size_t i = 0; i < 10; i++)
	{
		scanf_s("%c", &str[i]);
	}
	int count[26] = { 0 };    //代表26个英文字母出现的次数。

for (size_t i = 0; i < 11; i++)
	{
		int index=str[i]-'a'; //用户输入的字符再count数组中的下标值。
		count[index]++;	
	}
for (size_t i = 0; i < 26; i++)
	{
		if (count[i] != 0)
		{
			printf("%c字符在字符串中出现%d次\n",i+'a',count[i]);
		}
	}

字符串获取scanf:

        1.用于存储字符串的空间必须足够大,防止溢出。char str[5];

        2.获取字符串,%s,遇到空格 和  \n 终止

 借助“正则表达式”获取带有空格的字符串,scanf( " % [ ^ \n ] " , str);

%表示格式匹配符,中括号表示取值范围,上限符表示除....之外

gets函数:

获取一个字符串,返回字符串的首地址,可以获取带有 空格 的字符串

接收一个字符指针作为参数,该指针指向已经分配好空间的一个字符数组。当调用gets()函数时,将读到的字符串赋值给该字符数组。
读到的字符串会以指针形式返回。这点与scanf函数类似

        char *gets(char *s) 

        参数:用来存储字符串的空间。

        返回值:返回实际获取到的字符串首地址

        gets(str)与scanf("%s",str)区别在于gets允许字符串中含有空格,scanf则不允许

【不安全字符串获取】

 //头文件报错原因

fgets函数:

空间足够会读取\n,空间不足则舍弃【安全】

        char *fgets(char*s,int size,FILE *stream);

        参数1:用来存储字符串的空间地址

        参数2:描述空间的大小

        参数3:读取字符串的位置

        返回值:返回实际获取到的字符串首地址

	char str[100];

	printf("获取的字符串为:%s\n", fgets(str,sizeof(str),stdin));

puts函数:

输出字符串后会自动添加 \n 换行符

        pritnf("%s","hello"); /printf("hello\n");/puts("hello\n");

        int puts(const char *s);

                参数1:写出到屏幕的字符串

                返回值:成功:非负数,0   失败:-1

fputs:

        输出字符串后不添加\n换行符

        int fputs(const char*str, FLIE * stream);

        参数1:写出到屏幕的字符串。   屏幕 ---》标准输出:stdout

        参数:写出位置stdout

      返回值:成功:0   失败:-1

strlen:

获取字符串的有效长度,不包括  \0

	char str[]="hello world";

	printf("sizeof(str)=%u\n",sizeof(str));

	printf("strlen(str)=%u\n",strlen(str));

输出:

str=12

str=11

 参数1:待求长度的字符串

返回:有效字符个数

          获取途中碰到 \0 结束

	char str[]="hello\0world";

	printf("sizeof(str)=%u\n",sizeof(str));

	printf("strlen(str)=%u\n",strlen(str));

输出;

str=12

str=5

	char str[]="hello\0world";	

    int i = 0;

	while (str[i] != '\0')
	{
		i++;
	}
	    printf("%d\n",i);

//等价 printf("%d\n",strlen(str));

字符串追加:

        char str1[ ]="hellow";

        char str2[ ]="world";

        char str3[100]={0};

	char str1[] = "hellow";

	char str2[] = "world";

	char str3[100] = { 0 };
	int i = 0;
	while (str1[i]!='\0')
	{
		str3[i] = str1[i];    //循环将str1中的每一个元素交给str3
		i++;
	}
	int j = 0;
	while (str2[j] != '\0')
	{
		str3[j + 5] = str2[j];
		j++;
	}
	
	printf("%s\n",str3);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值