给一个固定的字符串,输入另一个字符串和它比较,直到猜对为止

本以为很简单,其实简单中也能学到很多细节的问题,下面附上自己的程序,自己学到的细节或者觉得要注意的点在注释中有说明

/* 给一个固定的字符串,输入另一个字符串和它比较(要求只要字母对应上就可以,不用大小写一模一样),直到猜对为止 */
/* 思路:将字符串全变为大写字母构成的字符串,再循环比较 */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 40

void ToUpper(char *);
int cmpstr(char*, char*);

int main (void)
{
    char ANSWER[] = "Grant";    //这里的ANSWER要用变量字符串数组来储存,不能用define常量形式,因为下面会改变其值为大写的
    char try1[MAX];
    char try2[MAX];             //用try2是为了防止改变读入的try1值

    puts ("Who is buried in Grant's tomb?");
    gets (try1);             //gets()函数从键盘读入数据,放入一个指针指向的地址中,以换行符结束读入
    strcpy(try2,try1);        //注意该strcpy()函数的用法
    ToUpper(ANSWER);
    ToUpper(try2);

    while (!cmpstr(ANSWER, try2))
    {
        printf("no, please enter another name:
");
        gets(try1);
        strcpy(try2,try1);
        ToUpper(try2);
    }
    puts("yes");
    puts(try1);

    return 0;
}

/********************比较两个字符串**********************/
int cmpstr(char* str1, char* str2)
{
    int i=0;

    if(strlen(str1) != strlen(str2))
        return 0;    //两个字符串长度不同的话,那么这两个字符串自然就不同了
    else
    {    
        while (str1[i]==str2[i] && str1[i]!='')
            i++;
        if(str1[i] == '')
            return 1;
        else 
            return 0;
    }
}

/********************将一个由字母构成的字符串中的所有字符都变成大写字母**********************/
void ToUpper(char * str)
{
    int i=0;
    while(i<strlen(str))
    {
        str[i] = toupper(str[i]);    //单独的使用toupper(str[i])不改变str[i]的值,要使用str[i]=toupper(str[i])赋值才能改变str[i]的值
        i++;
    }
}
原文地址:https://www.cnblogs.com/TomLily/p/5905578.html