haiouda 发表于 2015-3-16 23:32:01

指针数组如何赋值?

本帖最后由 haiouda 于 2015-3-17 13:09 编辑

/***********************************

输入3个字符串,按由小到大的顺序输出

      
**************************************/

#include <stdio.h>
#include <string.h>

int main()
{
      char *p,a0,a1,a2;
      void p1(char *m[],int n);
      void print(char *w[],int n);
      int i,n=3;      
      printf("请输入 3 个字符串:");
      scanf("%s",a0);
      scanf("%s",a1);
      scanf("%s",a2);
      printf("\n");
      
      for (i=0;i<3;i++)
      {
                switch (i)
                {
                case 0:      p=a0;break;
                        
                case 1:      p=a1;break;
                        
                case 2:      p=a2;
                        
                }
               
      }
   
      print (p,3);
    printf("\n");
      
      p1(p,3);
      
      
      print (p,3);
    printf("\n");
      
      
      return 0;
      
}


void p1(char *m[],int n)
{
      char *temp;
      int i,j,k;
      for (i=0;i<n-1;i++)
      {
                k=i;
                for(j=i+1;j<n;j++)
                        if(strcmp(m,m)>0)
                        {
                              k=j;
                        }
                        if(k!=i)
                        {
                              temp=m; m=m;m=temp;
                        }
      }
      
}




void print(char *w[],int n)
{
      int i;
      for (i=0;i<n;i++)
      {
                printf("%s ",w);
      }
      
      printf("\n");
      
      
}


这是书上课后题,越写感觉越麻烦;有没有简单的呀,帮我改改程序,谢谢了
我的问题是,指针数组在定义时没有赋值,就象上面那样子,然后,怎么给它赋值最简单呀(我是用了用了3个数组作中转,这是要求输入3个字串,要是要求输入1000个了串,还不得定义1000个数组了,麻烦死了)。







喜欢散步 发表于 2015-3-17 02:12:44

你这样写不行吧, 定义了三个指针, 没有指向, 你直接指定地址, 会出错的吧。

haiouda 发表于 2015-3-17 13:20:29

求指点迷津{:1_1:}

雪是梅之香 发表于 2015-3-17 22:00:54

首先要明白指针存放的是一个地址
一般情况下是先给一个变量赋值,然后再让指针指向这个变量
但是在楼主你所遇到的这个问题中,直接给指针赋值为什么不行呢,还是第一句话,
当从控制台赋值时,那个变量在电脑内存中并没有赋予地址,所以此时用指针的话被没有一个实际的地址给指针,所以出现错误

不知楼主听懂了没
一句话就是指针存放的是地址

haiouda 发表于 2015-3-18 08:36:06

上面的程序能改简单些么? 还是那个问题,要输入1000个字串,真的要准备1000个变量?

szy363309144 发表于 2015-3-18 21:14:23

用c++来写比较简单的

lightninng 发表于 2015-3-18 21:58:24

想问楼主问题到底是怎样的,是按三个字符串的大小 排序,还是把三个字符串里的每个字母都拿出来放到一起排序?

haiouda 发表于 2015-3-18 22:09:45

lightninng 发表于 2015-3-18 21:58
想问楼主问题到底是怎样的,是按三个字符串的大小 排序,还是把三个字符串里的每个字母都拿出来放到一起排 ...

我的问题是,把现有的题改成:“输入1000个字符串,然后按由小到大的顺序输出” 的程序应该如何时来写,谢谢

lightninng 发表于 2015-3-18 22:29:43

c语言好久没看了,字符数组相关知识记的不是很清楚用文字描述代替,见谅
定义字符数组 s1和s2,
int seq #整形数组记录大小顺序
for(i = 1, i <=1000, i++)seq=i;
#用冒泡排序法
for(i = 999, i >= 0,i--)
{
        for(j = 0,j < i,j++)
        {
                把第j个字符串赋值给s1
                把第j+1个字符串赋值给s2
                比较两者大小
                如果s1>s2
                交换seq和seq
        }
}
按照seq数组中保存的顺序输出字符串

haiouda 发表于 2015-3-19 00:09:04

本帖最后由 haiouda 于 2015-3-19 00:39 编辑

lightninng 发表于 2015-3-18 22:29
c语言好久没看了,字符数组相关知识记的不是很清楚用文字描述代替,见谅
谢谢,你这个,没有动态输入字符串常量的过程;能补上这个过程么?

还有,你这里 char seq(1000); 这是定义长度为1000个‘字符’的一个字符串,也不是我要的1000个‘字符串常量’
*************************************************************************************************************
'c' 这个是字符常量       “cc”这个是字符串常量
我要的是后者1000个,动态(程序运行时输入),然后比较它们大小,再按从小到大的顺序输出。


题目:输入1000个字符串,按由小到大的顺序输出

当然1000个可能是多了点,要能设计出输入30或者50的也行,必竟改一下数字就是1000个了{:1_1:}
我最上面的,方法可见是不行的,我要,求取的是:思路方法和关键的语句。

*******************************************************************************************************************
#include <stdio.h>

int main()
{
char *p;
p="China";
p="man";
printf("%s %s\n",p,p);
#endif;
}
上面这段程序,定义了30个指针组成的,指针数组,前二个指针指向了字符串,还有28个指针没有指向字符串,如何实现动态输入28个字符串,让其它的指针,指向输入的28个字符串;这个就是我要,求教的问题,谢谢。


lightninng 发表于 2015-3-19 08:54:51

char *p,str;
for(i = 0, i <30, i++)
{
        scanf("%s",str);
        p = str;
}

haiouda 发表于 2015-3-19 08:56:58

lightninng 发表于 2015-3-19 08:54


你这个,只能输入相同的字符串!而且是最后的那个字符串,因为所有字符串的地址相同。

lightninng 发表于 2015-3-19 08:59:24

haiouda 发表于 2015-3-19 08:56
你这个,只能输入相同的字符串!而且是最后的那个字符串,因为所有字符串的地址相同。

恩。。刚想了好像确实不对。正想上来改~~
主要是新的字符串必须得有新的地址,那就得先给它申请好地址,直接用一个二元数组不好么。。。
这样的char str

haiouda 发表于 2015-3-19 09:02:30

本帖最后由 haiouda 于 2015-3-19 09:03 编辑

lightninng 发表于 2015-3-19 08:59
恩。。刚想了好像确实不对。正想上来改~~
主要是新的字符串必须得有新的地址,那就得先给它申请好地址, ...
可以的,这是个好方法,谢谢
可具体怎么实现?

haiouda 发表于 2015-3-19 09:06:50

lightninng 发表于 2015-3-19 08:59
恩。。刚想了好像确实不对。正想上来改~~
主要是新的字符串必须得有新的地址,那就得先给它申请好地址, ...

是不是要用个三维数组才能实现? 即然是数组,那就得先声明行 和列,这样就对输入有了限制(输入字符串不能长于声明)……

lightninng 发表于 2015-3-19 09:10:36

本帖最后由 lightninng 于 2015-3-19 09:12 编辑

haiouda 发表于 2015-3-19 09:02
可以的,这是个好方法,谢谢
可具体怎么实现?
好久没碰c,现在机器 上只有python,写出代码来也不知道对不对char str;
int i;
for(i = 0, i <30, i++)
      scanf("%s",str);


应该就表示第i个字符串的首地址,但是语言中字符数组和符串似乎略有不同
另外:楼主,别说了了思路你倒是自己先敲点代码试一下啊,等别人的代码还不如自己来~~

lightninng 发表于 2015-3-19 09:13:51

haiouda 发表于 2015-3-19 09:06
是不是要用个三维数组才能实现? 即然是数组,那就得先声明行 和列,这样就对输入有了限制(输入字符串不 ...

请自行参考字符数组相关知识,这个好一点的书都有,你也可以百度,字符数组挺麻烦的,和字符串似乎略有不同~~

haiouda 发表于 2015-3-19 09:14:55

lightninng 发表于 2015-3-19 09:13
请自行参考字符数组相关知识,这个好一点的书都有,你也可以百度,字符数组挺麻烦的,和字符串似乎略有不 ...

多谢 了

haiouda 发表于 2015-3-19 14:42:47

本帖最后由 haiouda 于 2015-3-19 14:49 编辑

lightninng 发表于 2015-3-19 09:13
请自行参考字符数组相关知识,这个好一点的书都有,你也可以百度,字符数组挺麻烦的,和字符串似乎略有不 ...
这个的缺点是:1)不输入1000个字串不能退出(这个可以自己解决);    2)输入的字符串长度,最长为29个字符(由二维数组确定),输入不够浪费空间,输入超了无效;
                  第二个问题哪位能指点下怎么修改,谢谢:handshake

#include <stdio.h>
#include <string.h>
#define xx 1000
int main()
{
      void pxx(char *b[],int n);
      int i;
      char p,*a;
      
      for (i=0;i<xx;i++)
      {
                a=p;
      scanf("%s",a);
      }
   
   pxx(a,xx);



      for (i=0;i<xx;i++)
      {
      printf("%s ",a);
               
      }
      printf("\n");

return 0;

}

void pxx(char *b[],int n)
{
      int i,k;
      char *temp;
      for (i=n;i>0;i--)
      {
                for(k=0;k<i-1;k++)
                if(strcmp(b,b)>0)
                {
                        temp=b; b=b; b=temp;

                }
      }
}

haiouda 发表于 2015-3-19 22:00:16

本帖最后由 haiouda 于 2015-3-19 22:02 编辑

<p><p>#include <stdio.h>
#include <string.h>
#define xx 1000
int main()
{
      void pxx(char *b[],int n);    //声明函数 用于从小到大排列数组
      int i,k;
      char p,*a;

      printf("请输入字符串,按下回车表示一个字符串输入完毕,连续按三次回车表示所有字符串输入完毕:");
      for (i=0;i<xx;i++)
      {
                a=p;                //二次数组与指针数组建立关系
               
               
                for (k=0;k<30;k++)         //输入字符串
                {
                        p=getchar();
                        if(p=='\n')      //每一次回车,表明一个字符串输入完成
                        {
                              p='\0';
                              break;
                        }
                }
                if ( a=="" && a=="" && a=="")
                {
                        break;
                }
               
                        
      }
      
      printf("\n\n");
      pxx(a,xx);
      
      
      
      for (i=0;i<xx;i++)         //打印排序后的字符串
      {
                printf("%s\n",a);
               
      }
      printf("\n");
      
      return 0;
      
}

void pxx(char *b[],int n)   //函数定义
{
      int i,k;
      char *temp;
      for (i=n;i>0;i--)
      {
                for(k=0;k<i-1;k++)
                        if(strcmp(b,b)>0)
                        {
                              temp=b; b=b; b=temp;
                              
                        }
      }
}// 楼上第二个问题,怎么解决一点头绪也没有,求指点</p>
页: [1] 2
查看完整版本: 指针数组如何赋值?