初学者提问,问题如下图

img

我不知道怎么改错了有人能看一下,讲一下怎么改嘛?能给个改这种的思路就更好了,谢谢

把if else那里的str1,str2,str3,strmax改为str[0]1,str2[0],str3[0],strmax[0],这个用于判断字符串首字母的ASCII码的大小,即题目要求求字符串中最大的意思;

然后把语句如strmax=str1; 等改为strcpy(strmax,str1); 这个用于把最大的字符串复制到strmax字符数组中。

修改如下:

#include <stdio.h>
#include <string.h> 
int main(void){
    
    char str1[20],str2[20],str3[20],strmax[20];
    printf("请输入3个字符串:\n");
    scanf("%s%s%s",str1,str2,str3);
    
    if(str1[0]>str2[0])  //如果字符串str1比字符串str2首字母的大,则把str1复制到strmax中 
        strcpy(strmax,str1);  //把较大的字符串str1复制到strmax中 
        
    else     //如果字符串str2比字符串str1首字母的大,则把str2复制到strmax中 
        strcpy(strmax,str2); //把较大的字符串str2复制到strmax中 
        
    if(str3[0]>strmax[0])   //如果字符串str3比字符串strmax首字母的大,则把str3复制到strmax中 
        strcpy(strmax,str3); //把较大的字符串str3复制到strmax中 
    
    printf("最大的字符串为:%s\n",strmax);
    return 0;            
} 

img

z字符数组的处理 要么循环对每个字符进行处理,要么用c字符串处理相关函数啊

img

修改如下,供参考:

img

从输出看,应该是2个字符串逐一比较,然后比较每一位的ascii码对应的int值,int值较大的则放在为最大值。多次比较即可

img


代码如下

int main() {

    char s1[20],s2[20],s3[20];
    printf("请输入三个字符串\n");
    scanf("%s",s1);
    scanf("%s",s2);
    scanf("%s",s3);
    char *smax=s1;    
    //开始逐一比较
    int len1=strlen(s1);
    int len2=strlen(s2);
    int len3=strlen(s3); 
    //防止数组越界,取小值进行比较
    int i_minlen=len1<len2?len1:len2;
    for(int i=0;i<i_minlen;++i)
    {
        int val1=s1[i];
        int val2=s2[i];
        if(val1<val2)
        {
            smax=s2;
            break;
        }
        else {
            smax=s1;
            break;
        }
    }
    int i_maxlen=strlen(smax);
    i_minlen=i_maxlen<len3?i_maxlen:len3;
    for(int i=0;i<i_minlen;++i)
    {
        int val1=smax[i];
        int val2=s3[i];
        if(val1<val2)
        {
            smax=s3;
            break;
        }
        else {
            smax=smax;
            break;
        }
    }

    printf("最大的字符串为%s\n",smax);

    

    return 0;
}