A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。

#include <stdio.h>
#include <string.h>

int main()
{
    //定义六个内存为50的char型变量
    char ch1[50];
    char ch2[50];
    char ch3[50];
    char ch4[50];
    char ch5[50];
    char ch6[50];
    char *ch[6]={ch1,ch2,ch3,ch4,ch5,ch6};//定义字符串数组ch[]
    printf("请依次输入6个字符串:(仅仅包含英文字母和数字),回车确认\n");//提示用户输入字符串

    for (int m=0; m<6; m++) {
        printf("请输入第%d个字符串\n",m+1);

        scanf("%s",ch[m]);

    }



    for (int i=0; i<5; i++) {//采用冒泡法 大数下沉法排序
        for (int j=0; j<5-i; j++) {
            if (strcmp(ch[j],ch[j+1])>0) {
               char *temp = ch[j];               //请问大牛为什么这里要建立*temp,而不是temp,ch[]是存储的字符串,不是地址啊
                ch[j]=ch[j+1];
                ch[j+1]=temp;
            }
        }
    }

    for (int i=0; i<6; i++) {

        printf("%s ",ch);//按从小到大重新输出新的字符串数组
    }
    printf("\n");
    return 0;

}


4 个回复

倒序浏览
因为ch[j]里的j取值为0,1,2,3,4,代表ch[0],ch[1],ch[2],ch[3],ch[4],ch[5],ch[6]要依次参与比较,指针类型变量temp指的是六个字符串数组,里面存放的是当时指向的字符串首元素的地址,对于字符串来说.里面放了好多字符,其实交换地址,就可以直接改变里面的内容
回复 使用道具 举报
char *ch[6]={ch1,ch2,ch3,ch4,ch5,ch6};  这里不是char类型的指针数组么。。。
回复 使用道具 举报
ch是一个指针数组,而并不是你所说的字符串数组。里面存放的都是指针,是你定义的6个字符串的首地址。字符串的名称,就是代表的字符串第一个元素的首地址。
回复 使用道具 举报
再仔细读读代码哟,看清楚,ch[]是一个char型数组的头指针。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马