[学习笔记]达内纪录片day08 字符串操作函数使用

    选择打赏方式

今天学了字符串相关操作函数,其中还是有一些值得记下来的知识点的,需要注意一下。

一、字符串综合实例

代码如下:

#include <stdio.h>
#include <string.h>

int main()
{
	char str[10] = "abc";
	char *p_ch = NULL;
	int ret = 0;
	//strlen和sizeof的区别
	printf("strlen(str):%d\n",strlen(str));
	printf("sizeof(str):%d\n", sizeof(str));

	//strcat()
	p_ch = strcat(str,"xyz");
	printf("str:%s\n",p_ch);	//strcat会返回指向目标字符串的指针
	printf("str:%s\n", str);
	//strncat()
	p_ch = strncat(str, "999999",3);
	printf("str:%s\n", p_ch);

	//strcmp()
	ret = strcmp("win7","win8");
	printf("ret=%d\n",ret);
	//strncmp()
	ret = strncmp("win7", "win8",3);
	printf("ret=%d\n", ret);

	//strcpy()
	p_ch = strcpy(str, "Tank");	//strcpy复制字符串时会自动复制\0
	printf("str:%s\n", p_ch);
	//strncpy()
	p_ch = strncpy(str, "abcde",5);	//由于限制长度,\0不会被处理好
	printf("str:%s\n", p_ch);

	//memset()
	memset(str,'0',5);
	printf("str:%s\n", str);

	//strstr()
	p_ch = strstr("abc900", "9");	//返回找到的位置的内存地址
	printf("strch:%s\n", p_ch);

	system("pause");
	return 0;
}


执行结果:

TIM截图20190710212958.png

C语言没有字符串的概念,只有字符数组,strlen返回的是字符串除了\0以外的实际内容长度,而sizeof返回的是数组占用的内存大小。

strcmp()函数比较的是2个字符串每一个位置的一对字符的ASCII码,码大的字符串就大。

如果返回值 < 0,则表示 str1 小于 str2。

如果返回值 > 0,则表示 str2 小于 str1。

如果返回值 = 0,则表示 str1 等于 str2。

如果字符数组大小足够容纳被复制的字符串,那么strcpy函数可以完美的复制字符串,但是仅仅是把从数组的[0]-[n]用于存放被复制的字符串和\0,但是原本在数组中存储的字符并不会被清除,而是只覆盖用到的存储区,所以使用的时候要谨慎。

strncpy函数第三个参数如果小于strlen+1就会无法正确复制\0,这时候输出字符串,什么样子,就看后面那个\0在什么地方了...

memset函数用于填充字符数组的前n个存储区,也不会处理\0,需要手动添加。

strstr函数返回的是一个指针,地址是原字符数组+n(参数2字符串在参数1字符串中的第一个位置)


二、sprintf()和sscanf()

sprintf函数:

将格式化输出的结果传给字符串。

sscanf函数:

从字符串读取格式化输入。


sprintf:

#include <stdio.h>

int main()
{
	char str[10] = {0};
	sprintf(str,"%d %g %c\n",56,3.2f,'u');
	printf("str:%s",str);

	system("pause");
	return 0;
}

运行结果:

str:56 3.2 u


sscanf:

#include <stdio.h>

int main()
{
	int val = 0;
	float fval = 0.0f;
	char ch = 0;

	sscanf("p 12 6.8","%c %d %g",&ch,&val,&fval);
	printf("%g %c %d\n",fval,ch,val);
	system("pause");
	return 0;
}

运行结果:

6.8 p 12


三、atoi()和atof()

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int val = atoi("98k");
	double dval = atof("3.1415926");
	printf("val=%d\n",val);
	printf("dval=%.7f\n", dval);

	system("pause");
	return 0;
}

结果:

val=98
dval=3.1415926


四、fgets()函数

fgets() 和 gets() 一样,最后的回车都会从缓冲区中取出来。只不过 gets() 是取出来丢掉,而 fgets() 是取出来自己留着。

例子代码:

#include <stdio.h>
#include <string.h>

int main()
{
	char str[10] = { 0 };
	printf("请输入一个字符串:");
	fgets(str, 10, stdin);
	if (strlen(str) == 9 && str[8] != '\n') //字符串数组被写满,且最后一个有效字符不是换行符的情况下清空缓冲区,以免影响下次输入
	{
		//把输入缓冲区剩下的所有内容都读出来,然后扔掉
		scanf("%*[^\n]");
		scanf("%*c");
	}
	printf("str:%s",str);
	system("pause");
	return 0;
}

练习 从用户输入读入若干个成绩,每个成绩之间用','分割,算出总成绩。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char str[60] = { 0 };
	char *p_ch = str;
	int sum = 0;

	printf("请输入一个字符串:");
	fgets(str, 59, stdin);
	if (strlen(str) == 59 && str[58] != '\n')
	{
		scanf("%*[^\n]");
		scanf("%*c");
	}

	while (1)
	{
		//每次循环拆出一个成绩
		sum += atoi(p_ch);
		p_ch = strstr(p_ch,",");
		if (!p_ch)
			break;
		p_ch++;

	}

	printf("%d\n",sum);
	system("pause");
	return 0;
}

结果:

TIM截图20190710230441.png

THE END!

版权声明:若无特殊注明,本文皆为《 8964CN 》原创,转载请保留文章出处。
本文链接:[学习笔记]达内纪录片day08 字符串操作函数使用 http://www.8964cn.net/?post=69
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!