| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3714 人关注过本帖
标题:输入10个字符串,用指向执政的方法对10个字符串按照由小到大的顺序排序输出 ...
只看楼主 加入收藏
漠河
Rank: 2
等 级:论坛游民
帖 子:55
专家分:27
注 册:2016-10-5
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:4 
输入10个字符串,用指向执政的方法对10个字符串按照由小到大的顺序排序输出,用指针完成,请问怎么做,谢谢。
搜索更多相关主题的帖子: 字符串 
2016-11-22 13:49
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:7 
首先,题目发问出现明显错字,这个是坑爹的~第二,这是书上基础的典型例题,应该自己查书~
char *s[]={"","","","",""};
char **p=s;

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-22 14:14
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
收藏
得分:7 
#define _STDC_WANT_LIB_EXT1_ 1
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
     int capacity = 500;
     char** pString = calloc(capacity,sizeof(char*));
     char** pTemp = NULL;
     size_t maxlen = 50;
     char buf[maxlen];
     int count = 0;
     printf("Enter a string,enter empty line to end and print result.\n"); //提示信息
     while(true)
     {
         fgets(buf,maxlen - 1,stdin);
         if(strnlen(buf,maxlen) - 1 == 0)    //空行跳出循环
           break;
         if(buf[strnlen(buf,maxlen) - 1] == '\n') //解决末位的换行符
            buf[strnlen(buf,maxlen) - 1] = '\0';
         *(pString + count) = calloc(maxlen,sizeof(char));  //为字符串指针分配内存
         if(!(strcat(*(pString + count++),buf)))   //将buf链接到分配好的字符串指针
           return 1;
         if(count == capacity)  //给char**增加容量
         {   
              capacity += 5;
           pTemp = pString;
           pString = realloc(pString,capacity*sizeof(char*));
           pString = pTemp;
           pTemp = NULL;
         }
     }
     
     int i = 0;     //冒泡排序
     int j = 0;
     for(i = 1;i < count;++i)
     {
        for(j = 0;j < count - i;++j)
        {
            if(strnlen(*(pString + j),maxlen) >  strnlen(*(pString + j + 1),maxlen))
            {
               strcpy(buf,*(pString + j));
               strcpy(*(pString + j),*(pString + j + 1));
               strcpy(*(pString + j + 1),buf);
            }
        }   
     }
     
     printf("This is you just enter Strings:\n");  //显示结果
     for(i = 0;i < count;++i)
      printf("%s\n",*(pString + i));
     
     for(i = 0;i < count - 1;++i)  //释放内存
        free(*(pString + i));
     free(pString);
     return 0;
}
同是新手,那天刚做的,你可以参考一下我的思路,自己做一遍
收到的鲜花
  • 九转星河2016-11-22 15:09 送鲜花  5朵   附言:好文章
2016-11-22 14:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 EdmundDantes
诶,做得这么严谨,原谅我只是把输入字符串当作预设的字符常量处理了~,不过你那个申请动态二维数组的做法还是挺有价值的~赞一个

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-22 15:08
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
我自己也做了一下~如果Count 为已知常量的话会简单一点~

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Count 10
#define Length 100
int main()
{
    int i,j;
    char **p=(char**)calloc(Count,sizeof(char*));
    char *pt;

    *p=(char *)calloc(Count,Length*sizeof(char));

    for (i=0;i<Count;i++)
        p[i]=p[0]+i*Length;

    printf("请输入%d个字符串:\n",Count);
    for (i=1;i<Count;i++)
        gets(p[i]);

    printf("\n排序结果如下\n\n");

    for (i=0;i<Count;i++)
    {
        pt=p[0];
        for (j=0;j<Count;j++)
        {
            if (strcmp(pt,p[j])<0)
                pt=p[j];
        }
        puts(pt);   
        memset(pt,0,sizeof(pt));   
    }

    free(*p);
    free(p);
    return 0;
}


[此贴子已经被作者于2016-11-22 17:57编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-22 17:52
快速回复:输入10个字符串,用指向执政的方法对10个字符串按照由小到大的顺序排序 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028731 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved