### 题目类似于
从键盘上输入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;
}