算法学习——字符串问题(2)

后面的题目都比较简单啦,但是博主强迫症发作,想都刷完,也可以给之后刷题的同学一些参照。上一篇字符串匹配时没有用KMP算法,下次单独写一篇记录KMP算法,继续刷接下来五道字符串的题目。

问题 E: 字符串去特定字符
时间限制: 1 Sec 内存限制: 32 MB

题目描述
输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。

输入
测试数据有多组,每组输入字符串s和字符c。

输出
对于每组输入,输出去除c字符后的结果。

样例输入
goaod
a
样例输出
good

解题思路
这道题主要是要解决输入问题。字符数组的输入输出主要有三种方式:
(1)scanf输入,printf输出
(2)getchar输入,putchar输出
使用getchar输入字符后,一定要再加一句getchar()来把输入中每行末尾的换行符吸收掉。
(3)gets输入,puts输出
gets用来输入一行字符串,gets识别换行符\n作为输入结束,因此scanf完一个整数后,如果要使用gets,需要先用getchar接收整数后的换行符,并将其存放于一维数组中,puts用来输出一行字符串,即将一维数组在界面上输出,并紧跟一个换行。
Submission

#include<stdio.h>
#include<string.h>
int main()
{
    char str[10000];
    char sub;
    int i,j;
    while(gets(str))
    {
        char ans[10000]={0};
        j=0;
        sub=getchar();
        getchar();//这句是为了把输入中每行末尾的换行符吸收掉
        for(i=0;i<strlen(str);i++)
        {  
            if(sub!=str[i]){
                ans[j]=str[i];
                j++;
            }
            else{
                continue;
            }

        }
        printf("%s\n",ans);
    }
    return 0;
}

问题 F: 数组逆置
时间限制: 1 Sec 内存限制: 32 MB

题目描述
输入一个字符串,长度小于等于200,然后将数组逆置输出。

输入
测试数据有多组,每组输入一个字符串。

输出
对于每组输入,请输出逆置后的结果。

样例输入
tianqin
样例输出
niqnait
提示
注意输入的字符串可能会有空格。

解题思路
如果不能用string函数则通过遍历字符串自己实现strlen函数即可。

Submission

#include<stdio.h>
#include<string.h>
int main()
{
    char str[201];
    char sub;
    int i,j;
    while(gets(str))
    {

        for(i=strlen(str)-1;i>=0;i--)
        {  
            printf("%c",str[i]);
        }
        printf("\n");
    }
    return 0;
}

问题 G: 比较字符串
时间限制: 1 Sec 内存限制: 32 MB

题目描述
输入两个字符串,比较两字符串的长度大小关系。

输入
输入第一行表示测试用例的个数m,接下来m行每行两个字符串A和B,字符串长度不超过50。

输出
输出m行。若两字符串长度相等则输出A is equal long to B;若A比B长,则输出A is longer than B;否则输出A is shorter than B。

样例输入
2
abc xy
bbb ccc
样例输出
abc is longer than xy
bbb is equal long to ccc

解题思路

Submission

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[201];
    char str2[201];
    int i,j,num;
    scanf("%d",&num);
    while(num--)
    {
        scanf("%s %s",str1,str2);
        if(strlen(str1)>strlen(str2))
        printf("%s is longer than %s\n",str1,str2);
        else if(strlen(str1)<strlen(str2))
        printf("%s is shorter than %s\n",str1,str2);
        else
        printf("%s is equal long to %s\n",str1,str2);
    }
    return 0;
}

问题 H: 编排字符串
时间限制: 1 Sec 内存限制: 32 MB

题目描述
请输入字符串,最多输入4 个字符串,要求后输入的字符串排在前面,例如

输入:EricZ

输出:1=EricZ

输入:David

输出:1=David 2=EricZ

输入:Peter

输出:1=Peter 2=David 3=EricZ

输入:Alan

输出:1=Alan 2=Peter 3=David 4=EricZ

输入:Jane

输出:1=Jane 2=Alan 3=Peter 4=David

输入
第一行为字符串个数m,接下来m行每行一个字符床,m不超过100,每个字符床长度不超过20。

输出
输出m行,每行按照样例格式输出,注意用一个空格隔开。

样例输入
5
EricZ
David
Peter
Alan
Jane
样例输出
1=EricZ
1=David 2=EricZ
1=Peter 2=David 3=EricZ
1=Alan 2=Peter 3=David 4=EricZ
1=Jane 2=Alan 3=Peter 4=David

解题思路
本来开始想用队列来写,实现先进先出即可。然后发现一个二维数组就可以解决,题目中给出了输入字符串的个数范围和长度范围,因此不会有数组越界问题。首先将输入的字符串存入一个二维数组中,再从后往前输出二维数组中的字符串,如果字符串个数小于4,则倒序输出所有字符串如果字符串个数大于4,则输出4个字符串后不再输出,跳出循环。

Submission

#include<stdio.h>
#include<string.h>
int main()
{
    char str[101][21]={0};
    char sub[21];
    int i,j,m,len=0;
    scanf("%d",&m);
    while(m--){
        scanf("%s",sub);
        strcpy(str[len],sub);
        len++;
        for(i=1;i<=len;i++){
            if(i>4) break;
            printf("%d=%s ",i,str[len-i]);
        }
        printf("\n");
    }
    return 0;
}

问题 I: 【字符串】回文串
时间限制: 1 Sec 内存限制: 128 MB

题目描述
读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。

输入
一行字符串,长度不超过255。

输出
如果是回文串,输出“YES”,否则输出“NO”。

样例输入
12321
样例输出
YES

解题思路
从两端往中间进行回文串的比对,可以节省时间。在计算某个字符串的子串中有多少回文串时这种方法比较省时。

Submission

#include<stdio.h>
#include<string.h>
int main()
{
    char str[256];
    int i,flag,len=0;
    while(scanf("%s",str)!=EOF){
        flag=0;
        len=strlen(str);
        for(i=0;i<=len/2;i++){
            if(str[i]==str[len-i-1]){
                flag=1;
            }
            else{
                flag=0;
                break;
            }
        }
        if(flag==0) printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}

这些字符串的题目都是属于比较基础的,要写得又快又准确才行,呼~接下来要练习排序算法啦~加油~

    原文作者:Marilynmontu
    原文地址: https://blog.csdn.net/Marilynmontu/article/details/81978421
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞