题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    int n;
    char **strs;
    char *str;
    unsigned int strCount=0;
    unsigned int bufferLen;
    scanf("%d",&n);
    strs = (char**)malloc(n*sizeof(char *));
    bufferLen = n*10*sizeof(char);
    str = (char*)malloc(bufferLen);
    //存储数据
    for(int i=0;i<n;i++)
    {
        char tempStr[101];
        unsigned int tempStrCount=0;
        scanf("%100s",tempStr);
        tempStrCount=strlen(tempStr);

        if(strCount+tempStrCount+1>bufferLen)
        {
            bufferLen+=101;
            str=(char*)realloc(str,bufferLen);//使用realloc之后,之前的数据物理地址会变
        }
        strcpy(str+strCount,tempStr);        
        strCount+=tempStrCount+1;//还要加上\0占的1字节        
    }
    //查找字符串索引
    for(int i=0;i<bufferLen;i++)
    {
        static int strsCount=0;
        static int tempStrCount = 0;
        
        if(str[i]=='\0')
        {
            if(strsCount==n)
                break;
            else{
                strs[strsCount++]=str+i-tempStrCount;
                tempStrCount = 0;
            }
        }
        else
            tempStrCount++;
    }



    //冒泡排序
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(strcmp(strs[j],strs[j+1])>0)
            {
                char* temp = strs[j];
                strs[j]=strs[j+1];
                strs[j+1]=temp;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%s\n",strs[i]);
    }
    free(strs);
    free(str);
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务