C 怎么存储未知长度字符串?

三杨 2012-04-11 04:34:34
我讨厌C语言的灵活,但是不可否认这正是它的魅力所在;好吧问题来了,很简单的问题:
怎样存储未知长度的字符串,未知长度就是表示有可能无限大,以超大的数组下标这种不靠谱,说白了没从根本上解决问题;链表的方式应该可以,但是小弟不才,数据结构学得不好,求大虾给点代码片断,感激不尽,分亦送上。
...全文
1036 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperLy 2012-04-11
  • 打赏
  • 举报
回复
既然用scanf,
那么,要么提前申请一个比较大的空间,
要么先让用户输入字符长度上限。
nice_cxf 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

struct
{
char *context;
char *nxt;
char *pre;
}
这样更好,每一个节点都可以指定需要的大小。需要用多大就malloc多大。操作又灵活,又可根据自己需要选择大小。
[/Quote]

你这种需求的话用这个好点
不过最好要加上长度:
struct
{
char *context;
int len;
char *nxt;
char *pre;
}
千树之影 2012-04-11
  • 打赏
  • 举报
回复
既然不知道输入多长就用getchar一个一个读。还可以用一个char[20]缓冲一下。
千树之影 2012-04-11
  • 打赏
  • 举报
回复
GetChar(A* head,int n)
{
//找head为头的链表,第n/20个节点找第n%20个字符
}
InsertChar(A* head, int n, char c)
{
//如果n<链表长度*20直接插入,否则链表加个节点。
}
三杨 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
引用 3 楼 的回复:
1楼太浪费了。
struct
{
char data[20];
char *nxt;
char *pre;
}
省很多内存。20可以改。


可是要怎么用呢,理解我倒是可以理解。。


使用第N个元素就去第N/20个节点找第N%20个字符就行了
[/Quote]
如果我要scanf一个字符串,我也不知道用户要输入多少字符,我要怎么先把它存起来呢?存哪呢?如果就用这种结构体。
千树之影 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 3 楼 的回复:
1楼太浪费了。
struct
{
char data[20];
char *nxt;
char *pre;
}
省很多内存。20可以改。


可是要怎么用呢,理解我倒是可以理解。。
[/Quote]

使用第N个元素就去第N/20个节点找第N%20个字符就行了
三杨 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
1楼太浪费了。
struct
{
char data[20];
char *nxt;
char *pre;
}
省很多内存。20可以改。
[/Quote]

可是要怎么用呢,理解我倒是可以理解。。
yuhao113 2012-04-11
  • 打赏
  • 举报
回复
struct
{
char *context;
char *nxt;
char *pre;
}
这样更好,每一个节点都可以指定需要的大小。需要用多大就malloc多大。操作又灵活,又可根据自己需要选择大小。
三杨 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
很大到底有多大?
一般来说malloc来动态分配超大数组就可以了
没必要用链表,浪费空间
[/Quote]
其实要怪就怪我有钻牛角尖,话说真是遇到这种情况的话我完全可以用C++的动态数组;
可是我就是想用C解决这个问题,不考虑实际情况。
我自己才疏学浅,所以请大家多指教。
nice_cxf 2012-04-11
  • 打赏
  • 举报
回复
很大到底有多大?
一般来说malloc来动态分配超大数组就可以了
没必要用链表,浪费空间
千树之影 2012-04-11
  • 打赏
  • 举报
回复
1楼太浪费了。
struct
{
char data[20];
char *nxt;
char *pre;
}
省很多内存。20可以改。
三杨 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
struct
{
char data; //当前元素
char *nxt; //指向下一元素
char *pre; //指向上一元素
}
[/Quote]
还真是简洁呢,不知道我注释的对不对呢。
可是怎么用呢?
vanxeger 2012-04-11
  • 打赏
  • 举报
回复
struct
{
char data;
char *nxt;
char *pre;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧