钱宝网站怎么做任务/南昌seo排名
前言
这类题目旨在考察字符数组与循环结构的灵活运用。
当然,说实话,这类“不用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码的差值的方式来比较出现的不同字符的大小(这是我在老师的引导下才想到的)。另外一个易错点就是连接后,还有复制后,都别忘了添上字符串的结束符,它是字符串结束的标志。否则,将输出乱码。切记!