网资酷

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 93|回复: 1

EDUCoder编程实训题解(10.字符数组)

[复制链接]

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-12-12 16:31:04 | 显示全部楼层 |阅读模式
1.编辑与调试  2.顺序结构  3.选择结构一  4.选择结构二  5.循环一  6.循环二  7.函数
8.递归与嵌套函数  9.一维数组和二维数组  10.字符数组  11.指针一  12.指针二  13.结构体
14.文件
字符数组

第1关:字符逆序

任务描述
题目描述:输入一个字符串,输出反序后的字符串。
输入
一行字符
输出
逆序后的字符串
测试说明
样例输入:
123456abcdef
样例输出:
fedcba654321
特别注意:样例输出没有进行换行操作
解题程序一
/* 第1关:字符逆序 */

#include<stdio.h>
#include<string.h>

char s[1024];

int main(void)
{
    /*********Begin*********/
    scanf("%s", s);

    int i;

    for(i = strlen(s) - 1; i >= 0; i--)
        putchar(s);
    putchar('\n');

    /*********End**********/
    return 0;
}
解题程序二
/* 第1关:字符逆序 */

#include<stdio.h>
#include<string.h>

char s[1024];

int main(void)
{
    /*********Begin*********/
    scanf("%s", s);

    int start = 0, end = strlen(s) - 1;
    while(start < end) {
        char tmp = s[start];
        s[start] = s[end];
        s[end] = tmp;
        start++, end--;
    }

    printf("%s\n", s);
    /*********End**********/
    return 0;
}

第2关:字符统计

任务描述
题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。
输入
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
输出
对于每个测试实例,输出该串中数值的个数,每个输出占一行。、
测试说明
样例输入:
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
样例输出:
6
9
解题程序
/* 第2关:字符统计 */

#include<stdio.h>
#include<string.h>

char s[1024];

int main(void)
{
    /*********Begin*********/
    int n;
    scanf("%d", &n);

    while(n--) {
        scanf("%s", s);

        int cnt = 0, i;
        for(i = 0; s; i++)
            if(isdigit(s)) cnt++;

        printf("%d\n", cnt);
    }

    /*********End**********/
    return 0;
}

第3关:字符插入

任务描述
题目描述:输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。
输入
输入一段文字
输出
输入两个字符串a和b。
测试说明
样例输入:
MynameisAmy
MynameisJane
样例输出:
MynameisAymy
提示:
字符串长度不超过100
注意:使用gets()**函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
推荐使用:fgets()函数。
解题程序
/* 第3关:字符插入 */

#include <stdio.h>
#include <string.h>

#define N 100
char s1[N + 1], s2[N + 1];

int main(void)
{
    /*********Begin*********/
    scanf("%s%s", s1, s2);

    int i, j, mi1 = 0, mi2 = 0;
    char min1 = s1[0], max2 = s2[0];
    for(i = 1; s1; i++)
        if(s1 < min1) min1 = s1, mi1 = i;
    for(i = 1; s2; i++)
        if(s2 > max2) max2 = s2, mi2 = i;

    for(i = 0; i <= mi1; i++)
        putchar(s1);
    putchar(s2[mi2]);
    for(i = mi1 + 1; s1; i++)
        putchar(s1);
    putchar('\n');

    /*********End**********/
    return 0;
}

第4关:字符串处理

任务描述
题目描述:编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING", “123”, 3,则输出:“BEI123JING”。
输入
第一行和第二行分别输入两个字符串s1和s2,第三行输入插入位置f。
每个字符串的长度不超过100个字符。
输出
输出一行插入后的字符串。
测试说明
样例输入:
BEIJING
123
3
样例输出:
BEI123JING
注意:使用gets()函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
推荐使用:fgets()函数。
解题程序
/* 第4关:字符串处理 */

#include<stdio.h>
#include<string.h>

char s1[1024], s2[1024];

int main(void)
{
    /*********Begin*********/
    int n;

    scanf("%s%s%d", s1, s2, &n);

    strcat(s2, s1 + n);
    strcpy(s1 + n, s2);

    printf("%s\n", s1);

    /*********End**********/
    return 0;
}

第5关:字符串统计

任务描述
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
输入
输入一段文字
输出
输入一段字符,以stop作为最后输入的字符串。
测试说明
样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
提示
字符串长度不超过100。
注意:使用gets()函数会引起警告,但正确使用不影响测评结果。
推荐使用:fgets()函数。
解题说明
题目中的“字符串长度不超过100。”是指每个单词的长度不超过100,并不是一行字符数不超过100。这是一个坑啊!
解题程序
/* 第5关:字符串统计 */

#include<stdio.h>
#include <string.h>

#define N 1024
char s[N + 1], t[N + 1];

int main(void)
{
    /*********Begin*********/
    fgets(s, N, stdin);
    for(;;) {
        if(strncmp(s, "stop", 4) == 0 && s[4] == '\n')
            break;

        int sum = 0, maxlen = 0;
        char *p;
        p = strtok(s, " \t\n");
        while(p) {
            int len = strlen(p);
            if(len > maxlen) {
                maxlen = len;
                strcpy(t, p);
            }
            sum += len;

            p = strtok(NULL, " \t\n");
        }

        printf("%d %s\n", sum, t);

        fgets(s, N, stdin);
    }
    /*********End**********/
    return 0;
}

第6关:字符串排序

任务描述
题目描述:输入3行,每行n个字符串,按由小到大的顺序输出
输入
3行字符串
输出
按照从小到大输出成3行
测试说明
样例输入:
cde
afg
abc
样例输出:
abc
afg
cde
解题程序
/* 第6关:字符串排序 */

#include<stdio.h>
#include<string.h>

#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);
            else
                printf("%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);
            else
                printf("%s\n%s\n%s\n", s2, s3, s1);
        }
    }

    /*********End**********/
    return 0;
}

1.编辑与调试  2.顺序结构  3.选择结构一  4.选择结构二  5.循环一  6.循环二  7.函数
8.递归与嵌套函数  9.一维数组和二维数组  10.字符数组  11.指针一  12.指针二  13.结构体
14.文件
回复

使用道具 举报

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2025-3-4 19:02:01 | 显示全部楼层
鄙视楼下的顶帖没我快,哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|网资酷

GMT+8, 2025-3-14 23:07 , Processed in 0.084909 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表