标题:[讨论]我们学校的一个竞赛题,很有意思
只看楼主
风之梦
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-8-31
 问题点数:0 回复次数:9 
[讨论]我们学校的一个竞赛题,很有意思
这是我们学校的一个竞赛题。

分析下面的代码,回答后面的问题
#include<iostream.h>
#include<stdio.h>
void main()
{
int i;
char *p[3]={"hello,boy","yes","no"};//定义了含三个元素的字符型指针数组并初始化
for(i=0;i<3;i++) //输出这三个字符串
puts(p[i]);
cout<<endl;
}
上面的代码中是用指针数组来存储变长字符串的,显然节省了很多空间(避免了用二维数组时,要以最长字符串的长度为标准)
问:
如果仍然用指针数组来实现这种变长字符串的高效率(空间上)存储,但是,其中的字符串"hello,boy","yes""no"要求在程序执行时由用户自行从键盘输入,问这样还能实现吗?若能,写出代码,若不能,说明理由。
搜索更多相关主题的帖子: 竞赛题 学校 字符 include STRONG 
2007-11-06 18:43
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
得分:0 

可以啊` 可以用gets()函数,但是最后还是要把字符串放到
一个数组中,这样,如果用户输入的字符串大于我们开始定义的
数组的容量,也会造成内存泄漏的问题,我不晓得怎么解决,

不知道那位高手有更好的办法!

2007-11-06 20:58
禾今
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-10-28
得分:0 
试着写下吧:
#include<stdio.h>
main()
{
char **p;
int n;
scanf("%d",&n);
p=(char **)malloc(n*sizeof(char *);
for(i=0;i<n;i++)
gets(p[i]);
for(i=0;i<n;i++)
puts(p[i]);
free(p);
}

因为幸福 所以继续编程
2007-11-07 02:10
可见光
Rank: 1
等 级:新手上路
帖 子:143
专家分:0
注 册:2007-6-15
得分:0 
好像不行吧。。。我的怎么报内存访问错误
2007-11-07 10:50
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
得分:0 
char **p;
int n;
scanf("%d",&n);
p=(char **)malloc(n*sizeof(char *);
这样能行吗?

2007-11-07 12:34
Jacz
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-10-29
得分:0 
不懂

2007-11-07 13:11
风之梦
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-8-31
得分:0 

好郁闷呀,我学的是C++,上面的代码看不懂,那个char **是什么意思呀?可以告诉我吗?

2007-11-07 14:18
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
得分:0 
char **p表明p自身的类型是char **,而其指向的对象的类型是char *,也就相当于一个字符串


英者自知,雄者自胜
2007-11-07 14:40
风之梦
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-8-31
得分:0 

哦, 知道了,谢谢你呀。

2007-11-07 15:03
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
得分:0 
试着写一段代码,这有错误(当n值为3时,只能输入两个字符串就退出了)麻烦哪位版主看一下,学习中:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int main()
{
char **p;
int i;
int n;
printf("请输入字符串个数:");
scanf("%d",&n);
p=(char **)new(char[]);
for(i=0;i<n;i++)
{
p[i]=(char *)new (char *);
if(!p[i])
system("pause");
gets(p[i]);
}
for(i=0;i<n;i++)
puts(p[i]);
for(i=0;i<n;i++)
delete p[i];
delete[] p;
return 0;
}

[此贴子已经被作者于2007-11-7 16:36:34编辑过]


英者自知,雄者自胜
2007-11-07 15:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184006-1-1.html




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

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