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

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

/* 给一个固定的字符串,输入另一个字符串和它比较(要求只要字母对应上就可以,不用大小写一模一样),直到猜对为止 */
/* 思路:将字符串全变为大写字母构成的字符串,再循环比较 */
#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:\n");
        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]!=‘\0‘)
            i++;
        if(str1[i] == ‘\0‘)
            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++;
    }
}
时间: 2024-12-22 14:31:16

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

谭浩强 C程序设计 8.5 写一个函数,使输入的一个字符串按返序存放

写一个函数,使输入的一个字符串按返序存放,在主函数中输入和输出字符串. #include <stdio.h> #include <string.h> int main(){ void reverse(char arr[]); char arr[50]; gets(arr); reverse(arr); for(int i=0; i< strlen(arr); i++){ printf("%3c",arr[i]); } printf("\n&quo

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.

输入一个字符串,输出该字符串中对称的子字符串的最大长度。

public class LongestSymmtricalLength2 { /* * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度. * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. */ public static void main(String[] args) { String[] strs = { "a","google", "elgoog", "agol

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

java循环练习:输入一个字符串,统计该字符串中分别包含多少个数字,多少个字母,多少个其他字符

package practiceGO; import java.util.Scanner; /*  * 3.输入一个字符串,统计该字符串中分别包含多少个数字,多少个字母,多少个其他字符  */ public class Cto { public static void main(String[] args) {         int englishCount = 0;// 英文字母个数         int spaceCount = 0;// 空格个数         int numCoun

输入任意一个字符串,如:“abDEe23dJfd343dPOddfe4CdD5ccv!23rr”。 取出该字符串中所有的字母组成一个新的字符串。

#include <stdio.h>#include <string.h> /*输入任意一个字符串,如:“abDEe23dJfd343dPOddfe4CdD5ccv!23rr”. 取出该字符串中所有的字母组成一个新的字符串.*/ void main(){ char oldStr[100] = "abDEe23dJfd343dPOddfe4CdD5ccv!23rr"; char newStr[100]; int i = 0,j = 0; for(i = 0; i

Struts标签&lt;s:if&gt;判断字符串是否包含一个固定的值

Struts标签<s:if>判断字符串是否包含一个固定的值:1.如果比较对象是字符串: 1 <s:if test="str.contains('判断是否包含的字符串')" > 2 包含 3 </s:if> 4 <s:else> 5 不包含 6 </s:else> 2.如果比较对象是某个对象的属性: 1 <s:if test="(notice.title).contains('通知')"> 2 &

输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串&quot;345&quot;,则输出整数345。

方法一:使用C函数库中的函数atoi(const char *nptr),一行代码就可以解决问题,但这并不是题目所需要的解题思路: 方法二:假如我们输入的是“345”,从左到右依次遍历,第一次所要的结果是“3”,第二次所要的结果是“34”,34=3*10+4,第三次所要的结果是“345”,345=34*10+5.由此,我们可以从左到右依次遍历每一个字符,将前一次得到的结果*10+本次遍历的字符,使用一个循环就可以将一个字符串转化成一个整数. 如果字符串中的第一个字符是“-”,那么得到的是负整数.