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

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;
}

推荐文档