输入5个字符串(每个字符串的长度小于80),输出其中最小字符串

找到最小字符串:改错 并说出其中的理由

输入5个字符串(每个字符串的长度小于80),输出其中最小字符串

img

字符串比较 用 strcmp 函数
字符串赋值 用 strcpy 函数

img

问题出在了第10,13~15行
(1)首先讲一讲字符串的大小比较规则,它和单个字符比较不同,不能直接把两个临时变量进行比较字符串大小的比较,不是以字符串的长度直接决定,而是从最左边第一个字符开始比较,大者为大,小者为小,若相等,则继续按字符串顺序比较后面的字符怎样比较一个字符呢,在微型计算机中,字符一般都是以ASCII码值的大小作为字符比较的标准,如果某一个字符的ASCII码值的大于另一字符的ASCII码,则认为前一字符“大于”后一字符,如“C”大于“A”因为计算机的存储都是以0和1二进制形式来存储的,所以字符的存储其实是转化为十进制数字的形式,进而通过编译器转化为二进制储存在内存中,那问题来了,既然不能直接比较临时变量,那该如何进行字符串的比较呢,其实呀, C语言里面本身就有字符串比较函数,它被放在了文件string.h里面,他就是字符串函数strcmp(str1,str2),这里的str1和str2是字符串临时变量,通过这个函数我们直接可以比较两个字符串的大小,另外提一嘴,这个函数就是按照字符串比较的规则创建的,它有自己的返回值,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数
(2)我们想把一个字符串的内容赋值给另外一个字符串,是不能通过变量直接赋值,因为字符串就像字符数组一样

img

这里我们直接上图,

想想整形数组的赋值难道是通过变量名直接赋的吗,答案显然是否定的,那么问题就来了,难道字符串赋值要和数组一样,一步步循环吗,当然不是,我们要善于借助C语言已经有了的函数,在我们的string.h文件里面,也有这样一个函数,strcpy(str1,str2),它可以把字符串str2的内容复制到str1里面,那么这个问题是不是就迎刃而解了呢?
我们修改的话应该是这样

 strcpy(min,str);//第10行
 if(strcmp(min,str) > 0)//第13~15行
{
  strcpy(min,str);
}

程序修改如下所示,有问题私聊:
#include <stdio.h>
#include <string.h>


int main(void)
{
    int i;
    char str[5][80],min[80];
    printf("Input 5 string:\n")
    for(i=0;i<5;i++)
    {
        scanf("%s",str[i]);
    }
    strcpy(min,str[0]);
    for(i=1;i<5;i++)
    {
        if(min,str[i]>1)
            strcpy(min,str[i]);
    }
    printf("Min is:%s \n",min);
    return 0;
    
}