C语言经典例题-字符数组
创始人
2024-06-01 20:31:22

 (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

字符逆序:

题目:

代码思路:

代码表示:

字符统计:

题目:

代码思路:

代码表示:

字符插入:

题目:

代码思路:

代码表示: 

字符串处理:

题目:

代码思路:

代码表示:

字符串统计:

题目:

代码思路:

代码表示:

字符串排序: 

题目:

代码思路:

代码表示:


字符逆序:

题目:

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

样例输入: 123456abcdef

样例输出: fedcba654321

代码思路:

 这题只需要了解数字的交换,将后面的字符串和前面的字符串交换位置即可

代码表示:

#include
#include
int main(void)
{/*********Begin*********/char a[20];scanf("%s", &a);int n = strlen(a);for (int i = 0; i < (n / 2); i++){char tmp = a[i];a[i] = a[n - i - 1];a[n - 1 - i] = tmp;}printf("%s", a);/*********End**********/return 0;
}

字符统计:

题目:

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

样例输入:

2

asdfasdf123123asdfasdf

asdf111111111asdfasdfasdf

样例输出:

6

9

代码思路:

如果熟练掌握了计数器http://t.csdn.cn/2yeqJ,那这题就很简单了,只需要遍历字符串判断其是否在0~9之间即可

代码表示:

#include
#include
int main(void)
{/*********Begin*********/int n;scanf("%d",&n);for(int i =0;i='0'&&a[j]<='9'){sum++;}}printf("%d\n",sum);}/*********End**********/return 0;
}

字符插入:

题目:

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

样例输入:

MynameisAmy

MynameisJane

样例输出:

MynameisAymy

代码思路:

这题只需要找到两个字符串的最大字符和最小字符即可,用for循环遍历出s1的最小字符,s2的最大字符,然后将s2的最大字符插入到s1最小字符的后面。

代码表示: 

#include 
#include 
int main(void)
{/*********Begin*********/char s1[100], s2[100];scanf("%s%s", s1, s2);int i, j, mi1 = 0, mi2 = 0;char min1 = s1[0], max2 = s2[0];for (i = 1; s1[i]; i++)if (s1[i] < min1) min1 = s1[i], mi1 = i;for (i = 1; s2[i]; i++)if (s2[i] > max2) max2 = s2[i], mi2 = i;for (i = 0; i <= mi1; i++)putchar(s1[i]);putchar(s2[mi2]);for (i = mi1 + 1; s1[i]; i++)putchar(s1[i]);putchar('\n');/*********End**********/return 0;
}

字符串处理:

题目:

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

样例输入:

BEIJING

123

3

样例输出:

BEI123JING 

代码思路:

解决字符串插入的问题时,putchar是真的香O(∩_∩)O哈哈~,使用循环遍历+putchar可以解决很多关于插入类问题。这题只需要找到要插入元素的位置,然后插入,最后将被插入的字符串补齐即可

代码表示:

#include
#include
int main(void)
{/*********Begin*********/char s1[100], s2[100];int f;scanf("%s", s1);scanf("%s", s2);scanf("%d", &f);int a = strlen(s1);int b = strlen(s2);for (int i = 0; i < f; i++)putchar(s1[i]);for (int i = 0; i < b; i++)putchar(s2[i]);for (int i = f; i < a; i++)putchar(s1[i]);/*********End**********/return 0;
}

字符串统计:

题目:

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

样例输入:

My name is Amy

My name is Jane

stop

样例输出:

11 name

12 name

代码思路:

 解决这题,首先我们要知道gets()函数的作用

1.描述
C 库函数 char *gets(char *str) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

gets(str) 约等于 scanf("%s",&str) 会把读到的字符串写入数组,但又不同。
2.区别
scanf("%s",&str) :读到空格便停止。
gets(str) :一直读到敲回车(不管中间是否有空格)。

因为这题输入的有空格,所以不能使用scanf(),只能用gets()。首先我们创建两个计数器,sumLength记录总长度,partLength记录每组字符串长度,然后用max储存最长的字符串长度,Temp_Arr储存最长字符串,接着用while循环统计每段字符串的长度以及字符串总长度。统计完以后再遍历出最长的字符串存入Temp_Arr中,最后将其打印输出即可

代码表示:

#include
#include 
int main(void)
{/*********Begin*********/int sumLength = 0, partLength = 0;char arr[1000];int max = 0;char Temp_Arr[1000];gets(arr);int i, j;while (strcmp(arr, "stop") != 0){for (i = 0; i < strlen(arr); i++){if (arr[i] != ' '){sumLength++;partLength++;}else{if (partLength > max){max = partLength;}partLength = 0;}}if (partLength > max){max = partLength;}partLength = 0;for (i = 0; i < strlen(arr); i++){if (arr[i] != ' '){partLength++;if (partLength == max){for (j = 0; j < max; j++){Temp_Arr[j] = arr[j + i - max+1];}Temp_Arr[max] = '\0';break;}}else{             partLength = 0;}}printf("%d %s", sumLength, Temp_Arr);printf("\n");sumLength = 0;partLength = 0;max = 0;gets(arr);}/*********End**********/return 0;
}

字符串排序: 

题目:

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

样例输入:

cde

afg

abc

样例输出:

abc

afg

cde 

代码思路:

在解决本题之前,我们需要先了解两个函数:

strcmp

函数原型:int strcmp(const char* str1, const char* str2)

头  文  件:#include
返  回  值:str1 = str2   则返回0,
                  str1 > str2  则返回大于0的值,
                  str1 < str2  则返回小于0的值
说明:      判断两个字符串大小

因为本题是字符串比较,所以要用到strcmp函数,当s1

进而判断s1,s2,s3的大小,当s2>s1时再一次比较,进而再次判断s1,s2,s3的大小

代码表示:

#include
#include
#define N 1024
char s1[N], s2[N], s3[N];
int main(void)
{/*********Begin*********/scanf("%s%s%s", s1, s2, s3);if (strcmp(s1, s2) <= 0) {if (strcmp(s2, s3) <= 0)printf("%s\n%s\n%s\n", s1, s2, s3);else {if (strcmp(s3, s1) <= 0)printf("%s\n%s\n%s\n", s3, s1, s2);elseprintf("%s\n%s\n%s\n", s1, s3, s2);}}else{if (strcmp(s1, s3) <= 0)printf("%s\n%s\n%s\n", s2, s1, s3);else {if (strcmp(s3, s2) <= 0)printf("%s\n%s\n%s\n", s3, s2, s1);elseprintf("%s\n%s\n%s\n", s2, s3, s1);}}/*********End**********/return 0;
}

相关内容

热门资讯

长春高新股价涨5.09%,华宝... 1月12日,长春高新涨5.09%,截至发稿,报102.88元/股,成交8.22亿元,换手率2.07%...
安奈儿涨2.10%,成交额96... 1月12日,安奈儿盘中上涨2.10%,截至13:07,报17.97元/股,成交9662.70万元,换...
长春高新股价涨5.09%,泰康... 1月12日,长春高新涨5.09%,截至发稿,报102.88元/股,成交8.36亿元,换手率2.11%...
长春高新股价涨5.09%,民生... 1月12日,长春高新涨5.09%,截至发稿,报102.88元/股,成交8.40亿元,换手率2.12%...
长春高新股价涨5.09%,易方... 1月12日,长春高新涨5.09%,截至发稿,报102.88元/股,成交8.43亿元,换手率2.12%...