PTA第六章 数组课后作业-3

7-1 统计字符出现次数  分数 13

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:

输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:

在一行中输出给定字符在给定字符串中出现的次数。

输入样例:

programming is More fun!
m

输出样例:

2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
#include<string.h>
int main(){
    char ch;
    char A[81];
    int i, j;
    
    fgets(A, 80, stdin);
    scanf("%c", &ch);
    for(i=j=0;i<strlen(A);i++)
        if(A[i]==ch)
            j++;
    printf("%d", j);
    
    return 0;
}

7-2 字符串逆序  分数 10

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:

在一行中输出逆序后的字符串。

输入样例:

Hello World!

输出样例:

!dlroW olleH

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
int main(){
    char A[81];
    int i;
    gets(A);
    for(i=strlen(A)-1;i>=0;i--)
        putchar(A[i]);
    
    return 0;
}

7-3 删除重复字符  分数 13

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
#include<string.h>
int main(){
    char ch, t;
    char A[81];
    int i, j, s, r;
    gets(A);
    for(i=0,s=strlen(A);i<s;i++)//删除重复字符
        for(j=i+1;j<s;j++)//遍历数组与A[i]比较,若相同则覆盖并将后部分字符下标前移一位
            if(A[i]==A[j]){
                for(r=j;r<s;r++)
                    A[r]=A[r+1];
                s--;//每移动一次则数组下标数-1
                j--;//将移动后的首位与A[i]比较
            }
    for(i=0;i<s-1;i++)//冒泡法排序
        for(j=0;j<s-i-1;j++)
            if(A[j]>A[j+1]){
                t=A[j];
                A[j]=A[j+1];
                A[j+1]=t;
            }
    for(i=0;i<s;i++)//输出排序后的字符
        putchar(A[i]);
    
    return 0;
}

7-4 字符串字母大小写转换  分数 10

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:

输入为一个以“#”结束的字符串(不超过30个字符)。

输出格式:

在一行中输出大小写转换后的结果字符串。

输入样例:

Hello World! 123#

输出样例:

hELLO wORLD! 123

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>//利用ctype头文件判断字符大小写并转换
#include<ctype.h>

int main() {
    int N, j, i = 0;
    char A[31];
    char ch;

    while ((ch = getchar()) != '#') {
        if (islower(ch))
            putchar(toupper(ch));
        else if (isupper(ch))
            putchar(tolower(ch));
        else
            putchar(ch);
    }

    return 0;
}

7-5 说反话-加强版  分数 15

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

感谢杭州电子科技大学李卫明老师修正数据! 感谢浙江工业大学之江学院石洗凡老师修正测试点提示。

代码长度限制

16 KB

时间限制

300 ms

内存限制

64 MB

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int main(){
    char A[500001];
    bool R=false, P=true;
    long long t,i,j;
    
    gets(A);
    long long L=strlen(A)-1;//从字符串末尾向首位遍历
    
    for(i=L, t=0;i>=0;i--){
        if(A[i]==' '&&R){//如果该字符是空格且上一个字符不是空格
            if(P)
                P=false;//该字符串有空格的情况(第一个单词)
            else
                putchar(' ');//第二个单词及以后在单词前打出一个空格
            for(j=i+1;j<i+1+t;j++)//打印单词
                putchar(A[j]);
            t=0;
            R=false;//该字符为空格
        }
        else if(A[i]!=' '){//该字符若不是空格则字符数+1,下一次判断为真
            t++;
            R=true;
        }
    }
    if(t>0){
        if(!P)//判断整个字符串是否有空格,若有则在最后一个单词前打出一个空格
            putchar(' ');
        for(j=0;j<t;j++)
            putchar(A[j]);
    }
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值