### 题目类似于

从键盘上输入3个字符串,求出其中最大者。

输入

输入3行,每行均为一个字符串。

输出

一行,输入三个字符串中最大者。

### 思考与纠结点

字符在计算机中是以ASCII码存在的,所以肯定有数值的大小关系,所以尝试直接进行加和,**但是,发现出问题了!!!**

如下:

#include <cstdio>
#include <cstring>
int main()
{
    char str[3][10];
    for(int i = 0; i <= 2; i++){
        gets(str[i]);
    }
    int maxnum = 0;
    int sum = 0;
    int maxchar;

    for(int i = 0; i <= 2; i++){
        for(int j = 0; str[i][j] != '\0'; j++){
            sum += str[i][j];
        }
        if(sum > maxnum){
            maxnum = sum;
            maxchar = i;
            printf("%d", sum);
            sum = 0;
        }

    }
    printf("%d", maxnum);
    //puts(str[maxnum]);//这输出的不是一行
    for(int i = 0; str[maxchar][i] != '\0'; i++){
        printf("%c", str[maxchar][i]);
    }
    return 0;
}

这是修改过的复杂版本,没有问题:

#include <cstdio>
#include <cstring>
int main()
{
    char str[3][10];
    int num[3][10];
    for(int i = 0; i <= 2; i++){
        gets(str[i]);
    }
    int maxnum = 0;
    int sum = 0;
    int maxchar;
    for(int i = 0; i <= 2; i++){
        for(int j = 0; str[i][j] != '\0'; j++){
            num[i][j] = (int)str[i][j];
        }
    }
    for(int i = 0; i <= 2; i++){
        for(int j = 0; str[i][j] != '\0'; j++){
            sum += num[i][j];
        }
        if(sum > maxnum){
            maxnum = sum;
            maxchar = i;
            //printf("%d", sum);
            sum = 0;
        }
        else{
            sum = 0;
        }
    }
    //printf("%d", maxnum);
    //puts(str[maxnum]);//这输出的不是一行
    for(int i = 0; str[maxchar][i] != '\0'; i++){
        printf("%c", str[maxchar][i]);
    }
    return 0;
}

### 为什么呢?

我在思考的过程中想到了很多个原因(可见代码思考之疏漏),其中就有忘记了sum要清零,忘记了puts输出并不是一行,混淆了自己定义的变量名等等。。

但是!!!**最重要,也是最关键的,是我忘记了if条件的而判断,我直接想当然一个if就行,而忽视不满足if的情况,所以有疏漏,必要要错!!

修改过之后:

#include <cstdio>
#include <cstring>
int main()
{
    char str[3][10];
    for(int i = 0; i <= 2; i++){
        gets(str[i]);
    }
    int maxnum = 0;
    int sum = 0;
    int maxchar;

    for(int i = 0; i <= 2; i++){
        for(int j = 0; str[i][j] != '\0'; j++){
            sum += str[i][j];
        }
        if(sum > maxnum){
            maxnum = sum;
            maxchar = i;
            //printf("%d", sum);
            sum = 0;
        }
        else{
            sum = 0;
        }
    }
    //printf("%d", maxnum);
    //puts(str[maxnum]);//这输出的不是一行
    for(int i = 0; str[maxchar][i] != '\0'; i++){
        printf("%c", str[maxchar][i]);
    }
    return 0;
}

以及最初的版本

#include <cstdio>
#include <cstring>
int main()
{
    char str[3][10];
    for(int i = 0; i <= 2; i++){
        gets(str[i]);
    }
    int maxnum = 0;
    int sum = 0;
    int maxchar;
    for(int i = 0; i <= 2; i++){
        for(int j = 0; j < strlen(str[i]); j++){
            sum += str[i][j];
        }
        if(sum > maxnum){
            maxnum = sum;
            maxchar = i;
            sum = 0;
        }
        else{
            sum = 0;
        }
    }
    //puts(str[maxnum]);//这输出的不是一行
    printf("%d", maxnum);
    for(int i = 0; i < strlen(str[maxchar]); i++){
        printf("%c", str[maxchar][i]);
    }
    return 0;
}