前言
这类题目旨在考察字符数组与循环结构的灵活运用。
当然,说实话,这类“不用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