求字串拼接问题代码

caoxic 2007-05-29 02:55:12


要求如下:

输入:
1,字串
2,字串个数
3,存放每个字窜相应首地址偏移量的指针
4,存放拼接后的字串的指针
(3,4,已经分配好足够的内存)

输出:拼接后字串的总长度。

函数形式如下:

#define MAXSTRLEN 10

int pinjiestrings(const char *input[MAXSTRLEN],const int count,int *poffset,char *output);

要求拼接後的总长度尽量短需要:
1,字串包含在另一字串中的保留最长的字串就可以了

调用代码如下:
Const char inputstr[][MAXSTRLEN]={

};
Main()
{
int count;
int totallen,ret;
int *poffs;
int *plens;
char *poutput;
int i;

count = sizeof(inputstr)/sizeof(inputstr[0]);
poffs = (int *)malloc(count * sizeof(int));
plens = (int *)malloc(count * sizeof(int));
poutput = (char *)malloc(count * (MAXSTRLEN+1));

totallen = 0;
for(i=0;i<count;i++)
{
plens[i]=strlen(inputstr[i]);
totallen += plens[i];
}
ret = pinjiestrings(inputstr,count,poffs,poutput);
ASSERT(ret<=totallen);
for(i=0;i<count;i++)
{
ASSERT(strncmp(poutput+poffs[i],inputstr[i],plens[i])==0);
}
free(poffs);
free(plens);
free(poutput);
}

对1字串在另一字串中的情况举例

Const char inputstr[][MAXSTRLEN]={
"ca",
"an",
"cang",
"ha"
};

当函数调用后:poffs[0] 应该=0,poffs[1] 应该=1,poffs[2] 应该=0,poffs[3]=4
poutput应该是"cangha",函数返回值应该是6
...全文
253 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoxic 2007-07-31
  • 打赏
  • 举报
回复
我要做一词典,里面有100000单词,每个单词长度1~60字节,我如果按最长的分配
会占用100000×60个字节,6M字节,太大了。
我想优化,把所有的单词拼在一起,可能1~2M就够了,另外一个数组放偏移量和长度,这个数组4×100000,400k就够了。
这样总共不到3M,不是更省空间吗。

我想再省,就是一个包含另一个的就只保留一个,比如2单词 a ab, 按照上面的算法单词拼在一起是“aab”,3个字节,另外一个数组{{0,1},{1,2}},我要取第一个单词就从0开始取一个字节,我要第二个单词就是从1开始取2个字节。
我可以拼接下就是“ab”|{ {0,1},{0,2} },可以同样取到想要的单词,但是空间更省。

对csdn很失望
syy64 2007-07-31
  • 打赏
  • 举报
回复
C和C++都有相关的函数。
hoya5121 2007-07-31
  • 打赏
  • 举报
回复
没看明白你要问什么?
lion_wing 2007-07-27
  • 打赏
  • 举报
回复
哈哈,来人了,结贴吧!
caoxic 2007-07-27
  • 打赏
  • 举报
回复
没人回怎么结案啊
caoxic 2007-05-29
  • 打赏
  • 举报
回复
当然压缩效率最低的代码应该是直接拼,压缩比为0

int pinjiestrings(const char *input[MAXSTRLEN],const int count,int *poffset,char *output)
{
int i,off;
off=0;
for(i=0;i<count;i++)
{
poffset[i]=off;
strcpy(output+off,input[i]);
off+=strlen(input[i]);
}
return off;
}

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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