| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:改下错误..
只看楼主 加入收藏
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
改下错误..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100
#define N 100
main()
{ char a[M];
  char *p[N]={NULL};
  char *q=NULL;
  int i=0,s,k;
  while(*fgets(a,M,stdin)!='\n'&&(i<N))/*输入字符串*/
   {
      if(p[i]=(char*)malloc(strlen(a)+1)==NULL)  /* 请求空间 */
        {
           printf("......");

             return 1;
           }
             strcpy(p[i++],a);                 /* 把字符串放到p里 */

             }
               k=i;

        while(!s)                            /* 判断字符串的长度 */
           {
             s=1;

              for(i=0;i<k-1;i++)

               {if(strlen(p[i])>strlen(p[i+1]))

                 {q=p[i];p[i]=p[i+1];p[i+1]=q;s=0;} }  /* 交换长度 */
              }
                for(i=0;i<k-1;i++)
                 {

                  printf("%s",p[i]);                  /* 输出 */

                    free(p[i]);

                      p[i]=NULL;        }

             getch();

                return 0;
}

            /*字符串的长度交换.短到长错在哪里.?*/ 得不出结果..
搜索更多相关主题的帖子: include return 字符串 空间 
2009-11-17 16:00
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:15 
if(p[i]=(char*)malloc(strlen(a)+1)==NULL)  /* 请求空间 */
2009-11-17 18:37
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100
#define N 100
main()
{ char a[M];
  char *p[N]={NULL};
  char *q=NULL;
  int i=0,s,k=0,j=0;
  while(*fgets(a,M,stdin)!='\n'&&(i<N))/*输入字符串*/
   {
      if((p[i]=(char*)malloc(strlen(a)+1))==NULL)  /* 请求空间 */
        {
           printf("......");

             return 1;
           }
             strcpy(p[i++],a);                 /* 把字符串放到p里 */

              }
                  k=i;

        while(!s)                            /* 判断字符串的长度 */
           {
             s=1;

              for(i=0;i<=k-1;i++)

               { for(j=1;j<=k-1;j++)

                  if(strlen(p+i)>strlen(p+j))    /* 为什么不能交换 */
                     {
                      strcpy(q,p[i]);
                       strcpy(p[i],p[j]);
                        strcpy(p[j],q);s=0;}}
                     }

              for(i=0;i<=k-1;i++)
                 {

                  printf("%s",p[i]);                  /* 输出 */

                    free(p[i]);

                      p[i]=NULL;  }

             getch();

                return 0;
}                           

[ 本帖最后由 xy4919961 于 2009-11-17 20:41 编辑 ]

QQ群:96348241
2009-11-17 20:35
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
你这个程序代码的意思就是输入100个字符串,然后按照字符串的长度从小到大输出 是吧??
我自己写了一个,可能比较简单一些,仅供参考。。。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100
#define N 100
int main(void)
{   int i,j;
    char *a[M],*p;
    for( i=0;i<M;i++)
        a[i]=new char [N],scanf("%s",a[i]);
   
    for( i=0;i<M-1;i++)
        for(j=i+1; j<M; j++)
        if(strcmp(a[i],a[j])>0)
            {
                p=a[i];
                a[i]=a[j];
                a[j]=p;
            }
        for( i=0;i<M;i++)
            printf((i==M-1)?"%s\n":"%s ",a[i]);

}
2009-11-17 21:27
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:5 
程序代码:
 while(!s)                            /* 判断字符串的长度 */
           {
             s=1;

              for(i=0;i<=k-1;i++)

               { for(j=1;j<=k-1;j++)

                  if(strlen(p+i)>strlen(p+j))    /* 为什么不能交换 */
                     {
                      strcpy(q,p[i]);
                       strcpy(p[i],p[j]);
                        strcpy(p[j],q);s=0;}}
                  
   q是否有空间?
这是哪种排序法?


要练习算法就来http:///!!有挑战哦!!
2009-11-17 22:35
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:0 
感谢你的参考。问题解决了..
 原来是while(!s)里面的这里错。我的s没有赋值。所以他们没执行while里的循环,
  我知道你那种简单得多。不过那是作业题。.只是想理解下动态malloc这个函数而已。/*以下是修改过的.*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100
#define N 100
main()
{ char a[M];
  char *p[N]={NULL};
  char *q=NULL;
  int i=0,k=0,j=0;
  while(*fgets(a,M,stdin)!='\n'&&(i<N))/*输入字符串*/
   {
      if((p[i]=(char*)malloc(strlen(a)+1))==NULL)  /* 请求空间 */
        {
           printf("......");

             return 1;
           }
             strcpy(p[i++],a);                 /* 把字符串放到p里 */

              }
                  k=i;

              for(i=0;i<=k-1;i++)

               { for(j=0;j<=k-1;j++)

                  {if(strlen(p[i])>strlen(p[j]))

                     {strcpy(q,p[i]);
                       strcpy(p[i],p[j]);
                        strcpy(p[j],q); }

                   }

                }

               for(i=0;i<=k-1;i++)
                 {

                  printf("%s",p[i]);                  /* 输出 */

                  }

             getch();

                return 0;
}              

[ 本帖最后由 xy4919961 于 2009-11-17 22:53 编辑 ]

QQ群:96348241
2009-11-17 22:48
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:0 
回复 5楼 viky2003
if(strlen(p+i)>strlen(p+j))

 这里我写错了..这样写是地址比较大小。并不是里面的值比较大小.感谢给意见.

QQ群:96348241
2009-11-17 22:50
快速回复:改下错误..
数据加载中...
 
   



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

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