字符串专题【C语言】

A—雷同检测

考试的时候老师最讨厌有人抄袭了。 自从有了电子评卷,老师要查找雷同卷,就容易多了,只要将两个人的答案输入计算机,进行逐个字符的比对,把相同的位置都找出来,就一目了然了。

输入格式

22 行,每行包含一串字符(长度不超过 200200)。

输出格式

11 行,包含若干个以空格分隔的数字,表示出现相同字符的位置。

示例输入

I am  suantoujun.
I am  huayemei.

示例输出

1 2 3 4 5 6 8 9

———————————————————————————————————————————

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[201],str2[201];
    gets(str1);
    gets(str2);
    int len1,len2;
    len1=strlen(str1);
    len2=strlen(str2);
    
    int i,j=0;
    int x[201];
    for(i=0; i<len1; i++){
        if(str1[i]==str2[i]){
            x[j]=i+1;
            j++;
        }
    }

    for(i=0; i<j; i++){
        printf("%d ",x[i]);
    }


    //getchar();
    //getchar();
    return 0;
}

B—首字母大写

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。

输入

输入一行:待处理的字符串(长度小于80)。

输出

输出一行:转换后的字符串。

示例输入

if so, you already have a google account. you can sign in on the right.

示例输出

If So, You Already Have A Google Account. You Can Sign In On The Right.
 

———————————————————————————————————————————

#include<stdio.h>
int main()
{
    char str[81];
    gets(str);
    int i=0;

    while(str[i]!='\0'){
        if(str[i]>='a'&&str[i]<='z'){
            str[i]-=32;
        }
        while(str[i]!=' '&&str[i]!='\t'&&str[i]!='\r'&&str[i]!='\n'){
            i++;;
        }
        i++;
    }
    puts(str);

    //getchar();
    //getchar();
    return 0;
}

C—大小写转换

   读入一些字符串,将其中的小写字母转成大写字母(其他字符不变)。

输入

    输入为多行,每行为一个字符串,字符串只由字母和数字组成,长度不超过80。输入以“End of file”结束。

输出

    对于每行输入,输出转换后的字符串。

输入示例

Hello
ICPC2004
12345abcde

输出示例

HELLO
ICPC2004
12345ABCDE

提示

    用“scanf("%s", str) == 1”这个条件可以判断输入是否结束。如果此条件为假,则输入结束(对于本题)。

——————————————————————————————————————————

#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    char str[81];
    while(scanf("%s",str)==1){
        int len=strlen(str);
        for(i=0; i<len; i++){
            if(str[i]>='a'&&str[i]<='z'){
                str[i]-=32;
            }
        }
        for(i=0; i<len; i++){
            printf("%c",str[i]);
        }
        printf("\n");
    }

    //getchar();
    //getchar();
    return 0;
}

D—数字反转

给定一个整数,请将该数各个位上数字反转得到一个新数。 新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 22)。

输入格式

输入共 11 行,一个整数 NN

输出格式

输出共 1 行,一个整数,表示反转后的新数。

数据范围

-1,000,000,000 \n \the 1,000,000,000−1,000,000,000≤N≤1,000,000,000。

示例输入

123

示例输出

321

示例输入 2

-380

示例输出 2

-83

———————————————————————————————————————————

#include<stdio.h>
int main()
{
    int n,s=0;
    scanf("%d",&n);

    while(n!=0){
        s=s*10+n%10;
        n/=10;
    }
    printf("%d",s);

   // getchar();
   // getchar();
    return 0;
}

E—删除单词后缀

给定一个单词,如果该单词以、或者后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为 erlying00),否则不进行任何操作。

输入格式

输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为 3232)。

输出格式

输出按照题目要求处理后的单词。

示例输入

referer

示例输出

refer

——————————————————————————————————————————

#include<stdio.h>
#include<string.h>
int main()
{
    char str[33];
    gets(str);
    int len=strlen(str);
    if((str[len-1]=='r'&&str[len-2]=='e')||(str[len-1]=='y'&&str[len-2]=='l')){
        for(int i=0; i<len-2; i++){
            printf("%c",str[i]);
        }
    }
 
    else if(str[len-1]=='g'&&str[len-2]=='n'&&str[len-3]=='i'){
        for(int i=0; i<len-3; i++){
            printf("%c",str[i]);
        }
    }
    else printf("%s",str);

    //getchar();
    //getchar();
    return 0;
}

F—判断字符串是否为回文

输入一个字符串,输出该字符串是否回文。 回文是指顺读和倒读都一样的字符串。

输入格式

输入为一行字符串(字符串中没有空白字符,字符串长度不超过 100100)。

输出格式

如果字符串是回文,输出;否则,输出。"yes""no"

示例输入

abcdedcba

示例输出

yes
#include<stdio.h>
#include<string.h>
int main()
{
    char str1[101],str2[101];
    gets(str1);
    int len=strlen(str1);

    int i,j=0,cnt=0;
    for(int i=len-1; i>=0; i--){
        if(str1[i]!=str1[j]){
            printf("no");
            break;
        }
        else{
            cnt++;
        }
        j++;
    }
    if(cnt==len)printf("yes");

    //getchar();
    //getchar();
    return 0;
}

H—字典序

给你两个不同的字符串,如果第一个字符串的字典序小于第二个字符串,则输出YES,如果第一个字符串的字典序大于第二个字符串,则输出NO。

输入

两行。 第一行一个字符串,第二行一个字符串。 保证字符串的长度不超过10000。 保证两个字符串不完全相等。

输出

如果第一个字符串的字典序小于第二个字符串,则输出YES,如果第一个字符串的字典序大于第二个字符串,则输出NO。

示例输入

abc
abe

示例输出

YES

———————————————————————————————————————————

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[10001],str2[10002];
    gets(str1);
    gets(str2);
    if(strcmp(str1,str2)>0)printf("NO");
    else printf("YES");

    //getchar();
    //getchar();
    return 0;
}

I—验证子串

输入两个字符串,验证其中一个串是否为另一个串的子串。

输入格式

输入两个字符串, 每个字符串占一行,长度不超过 200200 且不含空格。

输出格式

若第一个串 s_1s1​ 是第二个串 s_2s2​ 的子串,则输出;"(s1) is substring of (s2)"

否则,若第二个串 s2是第一个串s1的子串,输出;"(s2) is substring of (s1)"

否则,输出。"No substring"

示例输入

abc
dddncabca

示例输出

abc is substring of dddncabca

———————————————————————————————————————————

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[201],str2[201];
    gets(str1);
    gets(str2);
    int len1=strlen(str1);
    int len2=strlen(str2);
    int i,j,a,b,c,d=0,e=0,l;
    if(len1>len2){
        a=len1;
        b=len2;
        c=0;
    }
    else {
        a=len2;
        b=len1;
        c=1;
    }

if(c==0){
    for(i=0; i<a; i++){
        l=i;
        for(j=0; j<b; j++){
            if(str2[j]==str1[l]){
                l++;
                d++;
            }
            else break;
        }
        if(d==b){
            printf("%s is substring of %s",str2,str1);
            break;
        }
        d=0;
        e++;
    }
  //  if(e==a)printf("No substring");
}
else if(c==1){
   
    for(i=0; i<a; i++){ 
         l=i;
        for(j=0; j<b; j++){
            if(str1[j]==str2[l]){
                l++;
                d++;
            }
            else break;
        }
        if(d==b){
            printf("%s is substring of %s",str1,str2);
            break;
        }
        d=0;
        e++;
    }
   // if(e==a)printf("No substring");
}
    if(e==a)printf("No substring");

    //getchar();
    //getchar();
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沐川҉ ღ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值