| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 635 人关注过本帖
标题:求解……(指针与字符串问题的续)
只看楼主 加入收藏
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求解……(指针与字符串问题的续)
终于自己搞定了,能够对输入的字符串进行排序了……不过还是有些问题不太明白……所以请问一下大家……
我慢慢说啊……
首先,我经过测试能运行的程序如下:
#include<stdio.h>
#include<string.h>
void main()
{
 char name[5][10];
 char *p[5];
 char *temp;
 int i,j;
 for(i=0;i<5;i++)
 gets(name[i]);
 for(i=0;i<5;i++)
 p[i]=name+i;
 for(j=0;j<4;j++)
 for(i=0;i<4-j;i++)
 {
  if(strcmp(p[i],p[i+1])<0)
  {
   temp=p[i];
   p[i]=p[i+1];
   p[i+1]=temp;
  }
 }
 for(i=0;i<5;i++)
 printf("%s\n",p[i]);
}
而我以前的程序如下:
#include<stdio.h>
#include<string.h>
void main()
{ char *s[10];
  char **p;
  char *t;
  int i,j;
  printf("input 10 strings\n");
  for(i=0;i<10;i++)
  gets(s[i]);
  p=s;
  for(j=0;j<10;j++)
  for(i=0;i<9-j;i++)
  { if(strcmp(s[i],s[i+1])<0)
    { t=s[i];
      s[i]=s[i+1];
      s[i+1]=t;
    }
  }
  for(i=0;i<10;i++)
  { printf("%s\n",**p);
    p++;
  }
}
我在楼下继续说……
搜索更多相关主题的帖子: 指针 字符 求解 
2010-07-20 01:02
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
我想请教的是:
以前我的指针数组中:
for(i=0;i<10;i++)
  gets(s[i]);
  p=s;
  for(j=0;j<10;j++)
  for(i=0;i<9-j;i++)
  { if(strcmp(s[i],s[i+1])<0)
    { t=s[i];
      s[i]=s[i+1];
      s[i+1]=t;
1、我这样输入对吗?我是否真的把输入的字符串的首地址分别赋给了指针数组*s[]?
2、我排序时的地址变换对吗?我觉得s[]既然是指针数组,那么它有确定的已经分配的内存,那么这其中的内容是可以重新赋值的?
3、
for(i=0;i<5;i++)
gets(name[i]);
for(i=0;i<5;i++)
p[i]=name+i;
for(j=0;j<4;j++)
for(i=0;i<4-j;i++)
{
  if(strcmp(p[i],p[i+1])<0)
  {
   temp=p[i];
   p[i]=p[i+1];
   p[i+1]=temp;
  }
}
我这段程序中和我失败的程序有什么本质的区别?我还没理解透……
貌似我只是确定的定义了一个二维数组,把输入的字符串放在里面存储起来,然后排序同样是对保存了字符串地址的指针数组进行互换排序,为什么会有差别?
4、……很遗憾的是,我对于以前的程序只找到了一个错误,那就是输出中**p应该写成*p,其他的确实理解不透彻
所以,希望大侠们不吝赐教……感谢……!!!

我很懒,但我讨厌别人说我懒……
2010-07-20 01:12
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
其实我更想知道我以前的主要错误在哪?……真的很伤脑筋……想了好长时间了都没想出来……

我很懒,但我讨厌别人说我懒……
2010-07-20 01:15
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:20 
(1)
char *s[10];
gets(s[i]);
这里错了呀,

添一行就可以了
char *s[10];
for (i = 0; i < 10; i++)
    s[i] = mallco(100);
gets(s[i]);

(2)
交换的是地址, 因为交换地址比交换内容速度快,而且还保证了原来的字符串顺序不变。
t=s[i];
s[i]=s[i+1];
s[i+1]=t;
换成这样也是可以的,
char t[100];
strcpy(t,s[i]);
strcpy(s[i],s[i+1]);
strcpy(s[i],t);





我就是真命天子,顺我者生,逆我者死!
2010-07-20 12:54
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
不要再续了哈,

我就是真命天子,顺我者生,逆我者死!
2010-07-20 13:00
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
按你说的意思,其实问题的关键就是我没有确切的定义一个可以访问的空间(姑且这么理解吧)来存放这个输入的字符串是吧?
谢谢啊……

其实我也就续了一次而已……

我很懒,但我讨厌别人说我懒……
2010-07-20 13:32
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
这个指针、数组、字符串问题真……的恼火……

我很懒,但我讨厌别人说我懒……
2010-07-20 13:33
快速回复:求解……(指针与字符串问题的续)
数据加载中...
 
   



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

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