1、字符逆序
输入一个字符串,存放在字符数组中,之后通过循环逆序输出。
1)使用gets()和strlen()
#include<stdio.h> #include<string.h> int main() { char str[100]; gets(str); int i, n; n = strlen(str); for (i = n - 1; i >= 0; i--) printf("%c", str[i]); return 0; }
2)使用scanf()
#include<stdio.h> int main(void) { char* ch; scanf("%s", ch); int i = 0, j; //while用来取得字符串的长度 while (*(ch + i) != '\0') { i++; } //for循环从后向前访问字符串,其实就是字符数组 for (j = i - 1; j >= 0; j--) { printf("%c", *(ch + j)); } printf("\n"); return 0; }
2、字符统计
输入一行字符(字符个数小于80),字符包括小写字母,大写字母,数字,空格等其他可打印符号。需要统计各字母的个数,小写字母和大写字母统计于小写字母上,代码如下,
#include<stdio.h> int main() { char a[60]; char ch; int i, cnt = 0, j, count = 0; printf("请输入一行字符串并按回车:\n"); do {//将输入的字符存入数组 ch = getchar(); a[cnt++] = ch; } while (ch != '\n'); for (i = 97; i <= 122; i++) {//第一层循环为小写字母a-z for (j = 0; j < cnt; j++) {//第二层遍历数组 if (a[j] >= 65 && a[j] <= 90)//大写转小写 a[j] += 32; if (a[j] == i)//若数组中有符合第一层循环中的小写字母则记下 count++; } if (count > 0)//输出统计下来的小写字母次数 printf("%c is %d\n", i, count); count = 0;//记得将count归零,不然count会累积 } // }
3、判断字符串中单词个数
输入一行字符串,判断字符串中单词个数,代码如下,
#include<stdio.h> #include<stdlib.h> int main() { int num = 0, word = 0; char* p = NULL; p = (char*)malloc(sizeof(char) * 100); printf("请输入一行字符串:\n"); gets(p); while (*p != '\0') { if (*p == ' ') { word = 0; } else { if (0 == word) { num++; word = 1; } else { word = 1; } } p++; } printf("数量:%d\n", num); return 0; }
4、字符串进行排序
输入三行字符串,对输入的3行字符串进行顺序输出,代码如下,
#include<stdio.h> #include<string.h> int main() { char s_1[1000], s_2[1000], s_3[1000]; scanf("%s%s%s", s_1, s_2, s_3); int len = strlen(s_1); char pre_1[1000]; if(strcmp(s_1, s_2) < 0) for(int i = 0; i < len; i ++) pre_1[i] = s_1[i]; else for(int i = 0; i < len; i ++) pre_1[i] = s_2[i]; if(strcmp(pre_1, s_3) > 0) for(int i = 0; i < len; i ++) pre_1[i] = s_3[i]; printf("%s\n", pre_1); char pre_2[1000]; if(strcmp(s_1, s_2) > 0) for(int i = 0; i < len; i ++) pre_2[i] = s_1[i]; else for(int i = 0; i < len; i ++) pre_2[i] = s_2[i]; if(strcmp(pre_2, s_3) < 0) for(int i = 0; i < len; i ++) pre_2[i] = s_3[i]; if(strcmp(pre_1, s_1) != 0 && strcmp(pre_2, s_1)) printf("%s\n", s_1); else if(strcmp(pre_1, s_2) != 0 && strcmp(pre_1, s_2) != 0) printf("%s\n", s_2); else if(strcmp(pre_1, s_3) != 0 && strcmp(pre_1, s_3) != 0) printf("%s\n", s_3); printf("%s", pre_2); return 0; }
5、字符串的指定位置插入字符
请输入一行数字和字母组合的字符串,在字符串中的所有数字字符前加一个@字符。代码如下,
#include <stdio.h> int fun(char *s) { char t[80]; int i, j; for(i=0; s[i]; i++) /*将串s拷贝至串t*/ t[i]=s[i]; t[i]='\0'; for(i=0,j=0; t[i]; i++) /*对于数字字符先写一个@符号,再写该数字字符*/ if(t[i]>='0' && t[i]<='9') { s[j++]='@'; s[j++]=t[i]; } /*对于非数字字符原样写入串s*/ else s[j++]=t[i]; s[j]='\0'; /*在串s结尾加结束标志*/ return 0; } int main() { char s[80]; printf ( "请输入一行字符串:" ); scanf ("%s", s); /*输入字符串*/ fun(s); printf ("输出: %s\n", s); /*输出结果*/ return 0; }