目录

写在前面

正文

第1关:字符逆序

第2关:字符统计

第3关:字符插入

第4关:字符串处理

第5关:字符串统计

第6关:字符串排序

写在最后


写在前面

本文代码是我自己所作,本人水平有限,可能部分代码看着不够简练,运行效率不高,但都能运行成功。另外,如果想了解更多,请订阅专栏头歌C语言程序与设计


正文

第1关:字符逆序

题目描述:输入一个字符串,输出反序后的字符串。

样例输入: 123456abcdef

样例输出: fedcba654321

#include#includeint main(void){/*********Begin*********/ char str[20]={0}; int i=0; gets(str); int len=strlen(str); for(i=len-1;i>=0;i--) { printf("%c",str[i]); }/*********End**********/return 0;}

第2关:字符统计

题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。

样例输入:

2

asdfasdf123123asdfasdf

asdf111111111asdfasdfasdf

样例输出:

6

9

#includeint main(void){/*********Begin*********/int n=0,i=0,j=0,count=0; char str[5][40]={0};scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",&str[i]);}for(i=0;i='0'&&str[i][j]<='9') count++;j++; }printf("%d\n",count);}/*********End**********/return 0;}

第3关:字符插入

题目描述:输入两个字符串ab,将b串中的最大字符插入到a串中最小字符后面。

样例输入:

MynameisAmy

MynameisJane

样例输出:

MynameisAymy

#include #include int main(void){/*********Begin*********/int i=0,j=0;char MAX,MIN;char str1[100]={0};char str2[100]={0};gets(str1);gets(str2);int len1=strlen(str1);int len2=strlen(str2);//找最大字符MAX=str2[0];for(i=0;i<len2;i++){if(MAX<str2[i])MAX=str2[i];}//找最小字符MIN=str1[0];for(i=0;istr1[i]){MIN=str1[i];j=i;}}for(i=len1-1;i>j;i--){ str1[i+1]=str1[i];}str1[j+1]=MAX; printf("%s",str1);/*********End**********/return 0;}

第4关:字符串处理

题目描述:编写程序,输入字符串s1s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING""123"3,则输出:"BEI123JING"

样例输入:

BEIJING

123

3

样例输出:

BEI123JING

#include#includeint main(void){/*********Begin*********/char s1[200],s2[200];int i,n;gets(s1);gets(s2);scanf("%d",&n);strcat(s2,s1+n);//把s1中n之后的字符串接到s2中strcpy(s1+n,s2);//把s2整体复制到s1的n之后printf("%s",s1);/*********End**********/return 0;}//本关使用字符串函数比较简单些

第5关:字符串统计

题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

样例输入:

My name is Amy

My name is Jane

stop

样例输出:

11 name

12 name

变量作用须知:i 用于倒序遍历字符串WordLength 用于记录字符串中`单个单词的长度`LongestWord 记录单词长度中的最大值LongestWord_mark 记录最长单词的下标,方便后面打印输出count 记录字符串中`所有单词的总长度`(不包含空格)——这就要求遍历一个非空格字符,count要+1大题思路是,倒序遍历,遇到字符,单词长度+1和字符个数+1,遇到空格,记录最大单词长度,并将单词长度清零下面拿实际例子来说,至于为什么倒着遍历,还得多看看题目的一个小要求My name is Janestop1.拿这个例子举例,首先输入My name is Jane,倒着从e遍历,遇到字符会执行这段代码,遍历M后循环结束if(a[i]!=' '){ WordLength++; count++;}2.中途遇到空格,会执行这段代码,更新一下LongestWord和LongestWord_mark,WordLength重置为0,方便记录下一个单词的长度if(WordLength >= LongestWord){LongestWord=WordLength;LongestWord_mark=i //记录最长单词前的空格的下标}//遇到空格之后,单词长度重置WordLength=0;3.但是这样会有问题,遍历完M这时,需要执行1来计数,也需要执行2来判断最长单词,但实际上只会执行1既执行1又执行2,但是if-else语句只执行其一我的想法是将遍历到M的情况单独讨论,禁止在1中执行,而在2中单独列出来
#include#include int main( ){ int i,WordLength=0,LongestWord_mark,count,LongestWord; char a[1000]; //输入一行,判断一次,打印一次 while(1) {//输入gets(a);count=0,LongestWord=0,LongestWord=0,WordLength=0;//终止条件if(strcmp(a,"stop")==0)break;//倒序遍历for(i=strlen(a)-1;i>=0;i--){ //处理字符(首字符除外) if(a[i]!=' '&& i!=0) {WordLength++;count++; } //处理空格和首元素 else {if(i==0){ count++; WordLength++;}//将最长单词前,空格的下标记录if(WordLength >= LongestWord){LongestWord=WordLength;LongestWord_mark=i+1;//应对最长单词是首单词的情况if(i==0){LongestWord_mark=i;}}//遇到空格之后,单词长度重置WordLength=0;} } //输出 printf("%d ",count); for(i=LongestWord_mark;i<LongestWord_mark+LongestWord;i++) printf("%c",a[i]); printf("\n"); } return 0;}

第6关:字符串排序

题目描述:输入3行,每行n个字符串,按由小到大的顺序输出

样例输入:

cde

afg

abc

样例输出:

abc

afg

cde

#include#includeint main(void){/*********Begin*********/char str[4][35];int i;for(i=0;i0){strcpy(str[3],str[1]);strcpy(str[1],str[0]);strcpy(str[0],str[3]);}if(strcmp(str[0],str[2])>0){strcpy(str[3],str[2]);strcpy(str[2],str[0]);strcpy(str[0],str[3]);}if(strcmp(str[1],str[2])>0){strcpy(str[3],str[1]);strcpy(str[1],str[2]);strcpy(str[2],str[3]);}for(i=0;i<3;i++) printf("%s\n",str[i]);/*********End**********/return 0;}

写在最后

点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论,你的意见是我进步的财富!