C语言之不用string库函数来实现字符串的连接,复制,比较与测长度(数组法)详解

导读:本篇文章讲解 C语言之不用string库函数来实现字符串的连接,复制,比较与测长度(数组法)详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

这类题目旨在考察字符数组与循环结构的灵活运用。
当然,说实话,这类“不用XX知识点的”题目,只在考试时有意义,真正编程,原则是效率至上,既然库函数已经帮你编好何必不用呢?(吐槽一下哈)


一、逐个击破(细化)

1.不用strcat函数实现字符串的连接

#include"stdio.h"
int main()
{
	char str1[10],str2[10];
	int i,j;
	printf("请输入两个字符串:\n");
	gets(str1);
	gets(str2);
	while(str1[i]!='\0')
	     i++;//将i移动到结束符位置
	for(j=0;str2[j]!='\0';j++)
	    str1[i+j]=str2[j];//i与j的起点不同了,前者是从str1字符串的结束符位置,后者是从0开始 
	str1[i+j]='\0';//结尾必须添上结束符,否则会出现乱码
	printf("将后者与前者连接:\n");
	puts(str1);//将str2里的字符串粘贴到str1的尾部再输出 
	return 0;
} 

调试结果

2.不用strcpy函数实现字符串的复制


#include"stdio.h"
int main()
{
	char a[10],b[10];
	int i;
	printf("请输入一个字符串:\n");
	gets(a);
	printf("将其复制到另外一个数组中为:\n");
	for(i=0;a[i]!='\0';i++)
	   b[i]=a[i];//对应逐个字符的复制,直到遇见结束符 
	b[i]='\0';//注意此时的i是a字符串结束符的位置。不要写成a[i+1]='\0' 
	puts(b);
	printf("复制完毕!\n");
	return 0;
} 

调试

3.不用strlen函数实现字符串的测长

#include"stdio.h"
int main()
{
	int i,num=0;//计数器 
	char a[20];
	printf("请输入一个字符串:\n");
	gets(a);
	for(i=0;a[i]!='\0';i++)
	   num++;//当不是结束符时num自增1,以此来计算字符串的长度 
	printf("该字符串的长度为%d\n",num);
	return 0; 
} 

在这里插入图片描述

4.不用strcmp函数实现字符串的比较

#include"stdio.h"
int main()
{
	char a[20],b[20];
	int x,i=0;
	printf("请输入两个字符串:\n");
	gets(a);
	gets(b);
	printf("比较两个字符串:\n");
	while(a[i]!='\0'&&b[i]!='\0')
	{
		if(a[i]==b[i])
		  i++;//逐个字符的比较,如果相等则i自增1进行下一个字符的比较 
		else 
		  break;//若不相等则跳出循环,比较二者ASCALL码的差值 
	}
	x=a[i]-b[i];//x用来存放此时二者字符的ASCALL码的差值 
	if(x>0)printf("前者大!\n");
	else if(x<0)printf("后者大!\n");//通过比较差值即可分成大小 
	else printf("相等!\n");
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、一线串珠(汇总)

分别编写四个函数实现上述功能。 这里就要体现“函数的模块化设计思想”,如果全在主函数中写来实现上面四个功能,那么主函数未免显得有点冗长。所以分别编写几个子函数来实现各自的功能,只需在主函数中调用即可。由于以上各部分代码已注释,下面将不再赘述。 代码如下:

#include"stdio.h"
int main()
{
	int lenth(char a[]);
	int compare(char a[],char b[]);
	void copy(char a[],char b[]);
	void connect(char a[],char b[]);
	char str1[10],str2[10],c[20],d[20];
	int x;
	printf("请输入两个字符串:\n");
	gets(str1);
	gets(str2);
	printf("前者长度为:%d\n",lenth(str1));
	printf("后者长度为:%d\n",lenth(str2));
	printf("二者进行比较:\n");
	x=compare(str1,str2);
	if(x>0)printf("前者大!\n");
	else if(x<0)printf("后者大!\n");
	else printf("相等!\n");
	printf("将两个字符串复制到另外两个数组中:\n");
	copy(str1,c);
	copy(str2,d);
	puts(c);
	puts(d);
	printf("将后者与前者连接后为:\n");
	connect(str1,str2);
	puts(str1);
	return 0;
}

int lenth(char a[])
{
	int i,num=0;
	for(i=0;a[i]!='\0';i++)
	     num++;
	return num; 
}


int compare(char a[],char b[])
{
	int i=0;
	while(a[i]!='\0'&&b[i]!='\0')
	{
		if(a[i]==b[i])
		  i++;
		else 
		  break;
	}
	return (a[i]-b[i]);
}


void copy(char a[],char b[])
{
	int i;
	for(i=0;a[i]!='\0';i++)
	     b[i]=a[i];
	b[i]='\0';
}


void connect(char a[],char b[])
{
	int i,j;
	while(a[i]!='\0')
	     i++;
	for(j=0;b[j]!='\0';j++)
	   a[i+j]=b[j]; 
	a[i+j]='\0';
}

在这里插入图片描述


总结

总的来说四个功能部分,字符串的比较是有点难的。尤其是能想到用返回二者ASCALL码的差值的方式来比较出现的不同字符的大小(这是我在老师的引导下才想到的)。另外一个易错点就是连接后,还有复制后,都别忘了添上字符串的结束符,它是字符串结束的标志。否则,将输出乱码。切记!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93517.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!