2023自学中 2023-10-28 17:43 采纳率: 40%
浏览 6

读入字符串,并排序字符,不知道通过指针,怎么比较‘cdef‘和‘cdfe‘的大小的?

'cdef'和'cdfe'

比如指针:

string[0] 指向 cdef的地址

string[1] 指向 cdfe的地址

string[0] 和string[1],我理解的是,比较指向该数组的首地址的首元素,那c 后面的字母,怎么比较大小的? 这里没有我弄清楚。

比如,b和a 排序是:ab (1个字符排序,这里排序我理解)

ba 和ab 排序,是ab ,ba (不看程序我知道是这么排序,但是看了排序代码,就不知代码怎么排序的,不是只比较首字母吗?)

下面的是代码

/*  
读入字符串,并排序字符 
*/

#include<stdio.h>
#include<string.h>
#define SIZE 81       //限制字符串长度,包括\0 
#define LIM 10        //可读入的最多行数 
#define HALL " "      //空字符停止输入 
void stsrt(char *string[],int num);   //字符串排序函数 
char *s_gets(char *st,int n);
int main(void)
{
    char input[LIM][SIZE];      //存储输入的数组 
    char *ptstr[LIM];           //内涵指针变量的数组 
    int ct = 0;                 //输入计数 
    int k;                      //输出计数 
    
    printf("Input up to %d  lines,and i will sort them.\n",LIM);
    printf("To stop,press the enter key at a line' start.\n");
    while(ct<LIM && s_gets(input[ct],SIZE) !=NULL && input[ct][0] !='\0')
    {
        ptstr[ct]=input[ct];       //设置指针指向字符串 
        ct++;
    }
    stsrt(ptstr,ct);               //字符串排序函数 
    puts("\nHere's the sorted list:\n");
    for(k=0;k<ct;k++)
        puts(ptstr[k]);            //打印排序后的指针 
    
    return 0;
} 
void stsrt(char *string[],int num)  //字符串排序函数 
{
    char *temp;
    int top,seek;

    for(top=0;top<num-1;top++)
        for(seek=top+1;seek<num;seek++)
            if(strcmp(string[top],string[seek]) >0)
            {
                temp=string[top];
                string[top]=string[seek];
                string[seek]=temp;
            }
}
char *s_gets(char *st,int n)     //输入字符串函数 
{
    char *ret_val;
    int i = 0;
    ret_val= fgets(st,n,stdin);
    if(ret_val)
    {
        while(st[i] !='\n' && st[i] !='\0')
            i++;
        if(st[i]=='\n')
            st[i]='\0';
        else
            while(getchar() !='\n')
                continue;
    }
    return ret_val;
}

下面是运行结果

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-28 20:36
    关注

    【以下回答由 GPT 生成】

    通过指针比较字符串的大小,可以使用strcmp函数进行比较。strcmp函数比较两个字符串的字典序大小,如果字符串1小于字符串2,则返回负值;如果字符串1等于字符串2,则返回0;如果字符串1大于字符串2,则返回正值。

    在上面的代码中,可以在stsrt函数中调用strcmp函数进行比较。可以按照以下步骤实现:

    步骤1:打开stsrt函数。

    步骤2:在stsrt函数中添加一个循环用来比较字符串的大小。

    步骤3:使用strcmp函数比较指针所指向的字符串。可以使用一个if语句来检查strcmp函数的返回值。

    步骤4:如果strcmp返回一个负值,表示字符串1小于字符串2,则交换字符串的位置。

    步骤5:重复步骤3和步骤4,直到所有的字符串都比较完毕。

    代码如下:

    void stsrt(char *string[], int num)
    {
        char *temp;
        int top, seek;
    
        for(top = 0; top < num-1; top++)
        {
            for(seek = top + 1; seek < num; seek++)
            {
                if(strcmp(string[top], string[seek]) > 0)
                {
                    temp = string[top];
                    string[top] = string[seek];
                    string[seek] = temp;
                }
            }
        }
    }
    

    使用这个函数进行字符串排序后,就可以按照字典序输出字符串。

    修改后的完整代码如下:

    /* 
    读入字符串,并排序字符 
    */
    
    #include <stdio.h>
    #include <string.h>
    #define SIZE 81       //限制字符串长度,包括\0 
    #define LIM 10        //可读入的最多行数 
    #define HALL " "      //空字符停止输入 
    
    void stsrt(char *string[], int num);   //字符串排序函数 
    char *s_gets(char *st, int n);
    
    int main(void)
    {
        char input[LIM][SIZE];      //存储输入的数组 
        char *ptstr[LIM];           //内涵指针变量的数组 
        int ct = 0;                 //输入计数 
        int k;                      //输出计数 
    
        printf("Input up to %d  lines, and I will sort them.\n", LIM);
        printf("To stop, press the enter key at the start of a line.\n");
    
        while(ct < LIM && s_gets(input[ct], SIZE) != NULL && input[ct][0] != '\0')
        {
            ptstr[ct] = input[ct];       //设置指针指向字符串 
            ct++;
        }
    
        stsrt(ptstr, ct);               //字符串排序函数 
        puts("\nHere's the sorted list:\n");
    
        for(k = 0; k < ct; k++)
            puts(ptstr[k]);            //打印排序后的指针 
    
        return 0;
    } 
    
    void stsrt(char *string[], int num)
    {
        char *temp;
        int top, seek;
    
        for(top = 0; top < num-1; top++)
        {
            for(seek = top + 1; seek < num; seek++)
            {
                if(strcmp(string[top], string[seek]) > 0)
                {
                    temp = string[top];
                    string[top] = string[seek];
                    string[seek] = temp;
                }
            }
        }
    }
    
    char *s_gets(char *st, int n)
    {
        char *ret_val;
        int i = 0;
    
        ret_val = fgets(st, n, stdin);
        if(ret_val)
        {
            while(st[i] != '\n' && st[i] != '\0')
                i++;
            if(st[i] == '\n')
                st[i] = '\0';
            else
                while(getchar() != '\n')
                    continue;
        }
    
        return ret_val;
    }
    

    使用这段代码可以实现对字符串的排序。代码使用fgets函数读入字符串,然后调用stsrt函数进行排序,最后按照字典序打印出排序后的字符串。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 10月28日
  • 创建了问题 10月28日