开发手册 欢迎您!
软件开发者资料库

C语言字符数组的编程实例练习题

C语言中数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。数组可能具有多个维度来表示数据,我们将其称之为多维数组,可以使用多个索引来访问多维数组中的元素。本文主要介绍C语言中字符数组编程实例练习题,以及相关示例代码。

1、字符逆序

输入一个字符串,存放在字符数组中,之后通过循环逆序输出。

1)使用gets()和strlen()

#include#includeint 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()

#includeint 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),字符包括小写字母,大写字母,数字,空格等其他可打印符号。需要统计各字母的个数,小写字母和大写字母统计于小写字母上,代码如下,

#includeint 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 #include 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#includeint 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 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;}