指针数组如何赋值?
本帖最后由 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个数组了,麻烦死了)。
你这样写不行吧, 定义了三个指针, 没有指向, 你直接指定地址, 会出错的吧。 求指点迷津{:1_1:} 首先要明白指针存放的是一个地址
一般情况下是先给一个变量赋值,然后再让指针指向这个变量
但是在楼主你所遇到的这个问题中,直接给指针赋值为什么不行呢,还是第一句话,
当从控制台赋值时,那个变量在电脑内存中并没有赋予地址,所以此时用指针的话被没有一个实际的地址给指针,所以出现错误
不知楼主听懂了没
一句话就是指针存放的是地址 上面的程序能改简单些么? 还是那个问题,要输入1000个字串,真的要准备1000个变量? 用c++来写比较简单的 想问楼主问题到底是怎样的,是按三个字符串的大小 排序,还是把三个字符串里的每个字母都拿出来放到一起排序? lightninng 发表于 2015-3-18 21:58
想问楼主问题到底是怎样的,是按三个字符串的大小 排序,还是把三个字符串里的每个字母都拿出来放到一起排 ...
我的问题是,把现有的题改成:“输入1000个字符串,然后按由小到大的顺序输出” 的程序应该如何时来写,谢谢 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: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个字符串;这个就是我要,求教的问题,谢谢。
char *p,str;
for(i = 0, i <30, i++)
{
scanf("%s",str);
p = str;
} lightninng 发表于 2015-3-19 08:54
你这个,只能输入相同的字符串!而且是最后的那个字符串,因为所有字符串的地址相同。 haiouda 发表于 2015-3-19 08:56
你这个,只能输入相同的字符串!而且是最后的那个字符串,因为所有字符串的地址相同。
恩。。刚想了好像确实不对。正想上来改~~
主要是新的字符串必须得有新的地址,那就得先给它申请好地址,直接用一个二元数组不好么。。。
这样的char str 本帖最后由 haiouda 于 2015-3-19 09:03 编辑
lightninng 发表于 2015-3-19 08:59
恩。。刚想了好像确实不对。正想上来改~~
主要是新的字符串必须得有新的地址,那就得先给它申请好地址, ...
可以的,这是个好方法,谢谢
可具体怎么实现?
lightninng 发表于 2015-3-19 08:59
恩。。刚想了好像确实不对。正想上来改~~
主要是新的字符串必须得有新的地址,那就得先给它申请好地址, ...
是不是要用个三维数组才能实现? 即然是数组,那就得先声明行 和列,这样就对输入有了限制(输入字符串不能长于声明)…… 本帖最后由 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个字符串的首地址,但是语言中字符数组和符串似乎略有不同
另外:楼主,别说了了思路你倒是自己先敲点代码试一下啊,等别人的代码还不如自己来~~
haiouda 发表于 2015-3-19 09:06
是不是要用个三维数组才能实现? 即然是数组,那就得先声明行 和列,这样就对输入有了限制(输入字符串不 ...
请自行参考字符数组相关知识,这个好一点的书都有,你也可以百度,字符数组挺麻烦的,和字符串似乎略有不同~~ lightninng 发表于 2015-3-19 09:13
请自行参考字符数组相关知识,这个好一点的书都有,你也可以百度,字符数组挺麻烦的,和字符串似乎略有不 ...
多谢 了 本帖最后由 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: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