C中如何输入任意长度的字符串?着急!!
要求用户输入3个任意长度的字符串,可以输入为空,为空就给NULL。
3个字符串的首字符地址分别给char *a,char *b,char *b
2小时以内要结果!!多谢了诸位!
问题点数:50、回复次数:31Top
1 楼favorit(九天剑舞·曾几何时,醉里挑灯看剑)回复于 2002-10-06 19:53:54 得分 0
char *a,*b,*c;
printf("Please enter the three string:");
scanf("%s,%s,%s",a,b,c);
好像是这个吧?记不太清楚了,好久不用c了
Top
2 楼liushmh(想开书店:) )回复于 2002-10-06 19:54:03 得分 0
任意长度是什么意思?Top
3 楼Louis819()回复于 2002-10-06 19:56:47 得分 0
预料或控制一下用户可能输入的字符数目为好,否则很难输入前给字符指针分配空间。Top
4 楼lbaby(春天来了...)回复于 2002-10-06 19:58:17 得分 0
任意长度?
你可以考虑用磁盘的空间,打开一个缓存文件
先把输入存到这个文件中,同时,我们也就得到了这个字符串的长度
呵呵,接下来,向操作系统要这个长度的内存。
,然后从磁盘中读出这个文件到内存。
(这样,你就得到一个任意长度的字符串--在磁盘被装满之前)
我只有这个思路,没有"2小时以内要的结果!!"
呵呵,祝你好运Top
5 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 19:59:27 得分 0
就是用户想输入多长就输入多厂,在内存允许的范围下。
Top
6 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 20:00:14 得分 0
不行。我要具体代码!只有两个小时!!!Top
7 楼lbaby(春天来了...)回复于 2002-10-06 20:01:36 得分 0
当然,上述算法是以速度为代价的
不过,磁盘的速度一般会比手工输入快
Top
8 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 20:03:02 得分 0
favorit(因你飞扬) :你那个明显不行。根本运行不过去!Top
9 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 20:04:18 得分 0
不考虑什么速度,什么空间。
输入的数据也许是0个字符,也许是1000个。估计不会再大Top
10 楼kingofvc(提薪像做贼 )回复于 2002-10-06 20:23:08 得分 50
char ch;
int length=1;
char *p=(char *)malloc(sizeof(char));
char *q;
*p='\0';
ch=getch();
while(ch!=13)
{
q=(char *)malloc(sizeof(char)*(length++));
拷贝p到q
q追加ch字符
free(p);
p=q;
}
Top
11 楼suntao222(三万英尺)回复于 2002-10-06 20:29:23 得分 0
# include <stdio.h>
main()
{
char *a,ch;
char str[1000];
a=str;
printf("input\n");
while((ch=getch())!='N') //N 是输入结束条件
{
printf("%c",ch);
*a++=ch;
}
*a='\0';
a=str;
printf("%s",a);
return 0;
}
另外两个输入字符串同上.最大输入你可自己在str数组中设定Top
12 楼suntao222(三万英尺)回复于 2002-10-06 20:46:23 得分 0
# include <stdio.h>
main()
{
FILE *fp;
char *a,ch;
//write data to a.txt
if((fp=fopen("a.txt","wb"))==NULL)
{
printf("cannot open the file");
exit(0);
}
while((ch=getch())!='N')
if(!ferror(fp)) fputc(ch,fp);
fclose(fp);
//read data from a.txt
if((fp=fopen("a.txt","rb"))==NULL)
{
printf("cannot open the file");
exit(0);
}
while((ch=fgetc(fp))!=EOF)
{
printf("%c",ch);
}
return 0;
}
这个是对磁盘文件操作的.理论上可以输入无限字符(只要磁盘空间够大^_^),剩下的另外两个字串你自己照着复制粘贴好了,不过别忘了改变量啊!Top
13 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 21:12:13 得分 0
kingofvc(其实恶狼2000也不错):
你的程序我调试死机!Top
14 楼johnmack(爱若琴弦)回复于 2002-10-06 21:13:54 得分 0
char ch;
int length=1;
char *p=(char *)malloc(sizeof(char));
char *q;
*p='\0';
ch=getch();
while(ch!=13)
{
q=(char *)malloc(sizeof(char)*(length++));
拷贝p到q
q追加ch字符
free(p);
p=q;
}
Top
15 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 21:17:19 得分 0
suntao222(三万英尺) :
我说了,不能局限大小。你的第一个程序不行Top
16 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 21:18:09 得分 0
johnmack(爱若琴弦) :什么意思?Top
17 楼suntao222(三万英尺)回复于 2002-10-06 21:25:52 得分 0
那你就用第二个了,我是用TC3.0写的,两个都已经编译通过了啊^O^.Top
18 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 21:28:51 得分 0
拷贝p到q
q追加ch字符
什么意思?Top
19 楼suntao222(三万英尺)回复于 2002-10-06 21:28:51 得分 0
注意最后的输入结束条件,是大写的N(我可不知道你想让用户输到哪结束),这个你可以自己改的,应该会改吧,你要是连这个都不会,那你就说说你想要的输入结束条件是什么,我给你改.Top
20 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-06 21:32:13 得分 0
谢谢你的帖子,不过我不想使用文件储存的方式。Top
21 楼suntao222(三万英尺)回复于 2002-10-06 21:56:21 得分 0
设数组的话最大是有限制的,所以只能用磁盘文件操作了.你要是想要无限字符输入,那你先给我找个有无限存储空间的内存条或者是硬盘来吧.Top
22 楼shclhs(hello)回复于 2002-10-06 22:18:59 得分 0
好象只有用联表了因为未只大小,Top
23 楼suntao222(三万英尺)回复于 2002-10-06 22:21:10 得分 0
好注意,就是麻烦点Top
24 楼lodemaggie(相约北京)回复于 2002-10-06 22:43:47 得分 0
favorit说的对吧!Top
25 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-07 13:35:08 得分 0
我假设内存无限大Top
26 楼suntao222(三万英尺)回复于 2002-10-07 13:39:49 得分 0
你怎么又来发这个烂帖子,两个小时不是早过了Top
27 楼shclhs(hello)回复于 2002-10-07 13:41:37 得分 0
靠你还是三颗星,真的假的,不解啊Top
28 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-07 13:44:08 得分 0
char ch;
int length=1;
char *p=(char *)malloc(sizeof(char));
char *q;
*p='\0';
ch=getch();
while(ch!=13)
{
q=(char *)malloc(sizeof(char)*(length++));
拷贝p到q
q追加ch字符
free(p);
p=q;
}
的完整代码是怎样?Top
29 楼rjcb99(伯克)回复于 2002-10-07 14:04:10 得分 0
链表Top
30 楼goblinize(骆驼,在BEA狂奔~~~)回复于 2002-10-07 14:07:56 得分 0
申请延长一天,今天晚上交
我的星是在2000/98那些区得的。
我编程很兰Top
31 楼zfjas(zfjas)回复于 2002-10-07 14:42:50 得分 0
先用一个足够大的中间量(可以是字符数组等)来存输入的值,然后再用strcpy()函数拷贝到变量中去。用缺省值来完成没有输入值的作NULL处理。Top




