第6部分 字符数组

第1关:字符逆序

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

相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
一行字符
输出
逆序后的字符串

测试说明
样例输入:
123456abcdef
样例输出:
fedcba654321

特别注意:样例输出没有进行换行操作

参考答案:

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
char a[200];
int i=0,j=0,t=0,k;
scanf("%s",a);
while(a[i]!='\0'){
    i++;
    j++;
}
for(i=0,k=j-1;i<k;i++,k--){
    t=a[i];
    a[i]=a[k];
    a[k]=t;
}
for(i=0;i<=j;i++)
  printf("%c",a[i]);


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

第2关:字符统计

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

相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
输出
对于每个测试实例,输出该串中数值的个数,每个输出占一行。、

测试说明
样例输入:
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
样例输出:
6
9

参考答案:

#include<stdio.h>
#include<string.h>
 
int main(void)
{
    int n,count,i,k,j,w;
    char a[100];
    scanf("%d",&n);
    w = n;
    int b[100]={0};
    while(n > 0)
    { 
        count = 0;
        scanf("%s",a); 
        k = strlen(a);
         
        for(i=0; i<k; i++)
        {
            if(a[i]<='9' && a[i]>='0')
            {
                count++;
            }
        } 
        b[n-1] = count;
        n--;
    }
    for(j=w-1; j>=0; j--)
    {
        printf("%d", b[j]);
        if(j>0)
        printf("\n");
    }
 
    return 0;
}

第3关:字符插入

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

相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入一段文字
输出
输入两个字符串a和b。

测试说明
样例输入:
MynameisAmy
MynameisJane
样例输出:
MynameisAymy
提示:
字符串长度不超过100

注意:使用gets()**函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
**推荐使用:fgets()函数。

参考答案:

#include<stdio.h>
#include<string.h>
int main()
{
 char a[101], b[100];
 int i = 0, j = 0, min, max, x, y;
 min = 0;
 max = 0;
scanf("%s",a);
scanf("%s",b);
 x = strlen(a);
 y = strlen(b);
 for(i=0;i<x;i++){
     if(a[i]<a[min])
     min=i;
 }
 for(j=0;j<y;j++){
     if(b[j]>b[max])
     max=j;
 }
 for(i=x;i>min;i--){
     a[i+1]=a[i];
 }
 a[min+1]=b[max];
 a[x+1]='\0';
 printf("%s",a);}

第4关:字符串处理

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

相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
第一行和第二行分别输入两个字符串s1和s2,第三行输入插入位置f。

每个字符串的长度不超过100个字符。
输出
输出一行插入后的字符串。

测试说明
样例输入:
BEIJING
123
3
样例输出:
BEI123JING

注意:使用gets()**函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
**推荐使用:fgets()函数。

参考答案:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char t[100],s[100];
    int i,j,pos;
    gets(t);
    gets(s);
    scanf("%d",&pos);
    for(i=0;i<strlen(t);i++)
    {
        printf("%c",t[i]);
        if(i+1==pos)
        {
            for(j=0;j<strlen(s);j++)
                printf("%c",s[j]);
        }
    }
    /*********End**********/
    return 0;
}

第5关:字符串统计

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

相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入一段文字
输出
输入一段字符,以stop作为最后输入的字符串。

测试说明
样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
提示:
字符串长度不超过100。

注意:使用gets()函数会引起警告,但正确使用不影响测评结果。
推荐使用:fgets()函数。

参考答案:

#include<stdio.h>
#include <string.h>
int main(void)
{
    /*********Begin*********/
    char a[100];
    int i, j, pos = 0;
    int str_len, word_len, max_word_len;
 
    while(1) {
        str_len = word_len = max_word_len = 0;
 
         fgets(a, 100, stdin);//fgets函数的用法
 
        if (strlen(a) <= 1)//输入的字符只有一个的情况
            continue;
        if (strlen(a) < 99)   //remove '\n'
            a[strlen(a)-1] = 0;
 
        if(strncmp(a,"stop", strlen("stop"))==0)
            break;
        for(i = 0; a[i] !='\0'; i++) {
            if(a[i] != ' ') {
                word_len++;
                str_len++;
                continue;
            }
            if (word_len  > max_word_len) {
                max_word_len = word_len;
                pos = i - word_len;
            }
            word_len = 0;
        }
        if (word_len  > max_word_len) {
            max_word_len = word_len;
            pos = i - word_len;
        }
 
        printf("%d ", str_len);
        for (i = pos; i < pos + max_word_len; i++)
            printf("%c", a[i]);
        putchar(10);
    }
 
    /*********End**********/
    return 0;
}

第6关:字符串排序

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

相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
3行字符串
输出
按照从小到大输出成3行

测试说明
样例输入:
cde
afg
abc
样例输出:
abc
afg
cde

参考答案:

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char a[30],b[30],c[30],max[30];
    scanf("%s %s %s",&a,&b,&c);
    if(strcmp(a,b)>0)
    {
        strcpy(max,a);
        strcpy(a,b);
        strcpy(b,max);
    }
    if(strcmp(a,c)>0)
    {
        strcpy(max,a);
        strcpy(a,c);
        strcpy(c,max);
    }
    if(strcmp(b,c)>0)
    {
        strcpy(max,b);
        strcpy(b,c);
        strcpy(c,max);
    }
    printf("%s\n%s\n%s",a,b,c);
    /*********End**********/
    return 0;
}
  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿哲也要努力学习!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值