计蒜客 —— 字符串判等问题

题目地址

 

本题的测试数据有点bug,表述不清晰

详情可以见 提问

 

 

 

题目信息:

 第一种方法:

#include<stdio.h>
#include<string.h>
char aa[110];
char b[110];
char c[110];
int main(){

    char a;
    int i =0;
    while( (a = getchar()) != '\n'){
        if (a == ' ')
            continue;
        if(a >= 65 && a <= 90){
            a = a + 32;
        }
        aa[i] = a;
        i++;
    }
    aa[++i] = '\0';

    gets(b);
    int bl = strlen(b);
    int j = 0;

    for(i = 0;i < bl;i++){
         if (b[i] == ' ')
            continue;
        if(b[i] >= 65 && b[i] <= 90){
            b[i] = b[i]+ 32;
        }
        c[j] = b[i];
        j++;

    }

    int x = strcmp(c,aa);
    if(x == 0)
        printf("YES");
    else
        printf("NO");
    return 0;
}

分析题目,第一行末尾 一定义有换行符 ' \n ',故可以不断 getchar() 读入一个字符,以该字符是否为 ' \n ' 作为结束标志。

每次读入字符,当该字符为 空格时跳过,为大写字母时,加32变为相应的小写字母存入缓冲字符串。

第二行,一个 gets()  函数即可读入一行数据【因为输入序列的末尾可能是 ' \n ' ,也可能没有】,所以一次性读入完事

再利用for循环不断遍历,重复第一行数据输入时的一系列判定操作,将结果存入缓冲字符串。最后将两个缓冲字符串利用函数 strcmp() 比较,完事

 

# gets() 函数已经废弃掉了,但暂时找不到 C语言中 如何输入 末尾不含‘ \n ’的含有空格的一行数据

scanf("%[^\n]" , str)   输入一行数据包括空格,直到遇到换行符 ' \n '

# c++ 中可以 cin.getline(a,100)   将一行序列存入a中,且最大字符数为 100,就可以实现输入 末尾不含‘ \n ’的含有空格的一行数据

 

 

第二种方法:

#include<stdio.h>
#include<string.h>
char aa[110];
char b[110];
int main(){
    char a;
    int i =0;
    while( (a = getchar()) != '\n'){
        if (a == ' ')
            continue;
        if(a >= 65 && a <= 90){
            a = a + 32;
        }
        aa[i] = a;
        i++;
    }
    aa[++i] = '\0';
    i = 0;
     while( (a = getchar()) != EOF && a != '\n'){
        if (a == ' ')
            continue;
        if(a >= 65 && a <= 90){
            a = a + 32;
        }
        b[i] = a;
        i++;
    }
    b[++i] = '\0';
    int x = strcmp(aa,b);
    if(x == 0)
        printf("YES");
    else
        printf("NO");
    return 0;
}

原理差不多~

 

posted @ 2019-09-24 22:50  远征i  阅读(530)  评论(0编辑  收藏  举报