| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4770 人关注过本帖
标题:求两个字符串的并集的c语言程序?
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
如果顺序无所谓的话,排下序会方便很多。

否则的话,我觉得 8楼 的想法也行吧。
2012-08-28 21:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果一个串中本身就有重复字符呢?
如果两个串都没有一个有足够的空间容纳并集呢?
那个函数的原型又没有表示利用哪个字符串做返回。
问题多着呢。

授人以渔,不授人以鱼。
2012-08-28 21:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用TonyDeng在2012-8-28 21:50:49的发言:

如果一个串中本身就有重复字符呢?
如果两个串都没有一个有足够的空间容纳并集呢?
那个函数的原型又没有表示利用哪个字符串做返回。
问题多着呢。

嘿嘿。。
2012-08-28 21:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 13楼 zklhp
你又奸笑?

授人以渔,不授人以鱼。
2012-08-28 21:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
再说极端一点,如果这些是中英文夹杂的字符串,你怎么办?

授人以渔,不授人以鱼。
2012-08-28 22:07
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:1 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* and_dynamic(const char* str1, const char* str2);
char* and_buffer(const char* str1, const char* str2, char* buffer);

char* and_dynamic(const char* str1, const char* str2)
{
    char* buffer = (char*)malloc(strlen(str1) + strlen(str2) + 1);
    /* Use buffer version */
    return and_buffer(str1, str2, buffer);
}

char* and_buffer(const char* str1, const char* str2, char* buffer)
{
    int   table[256] = { 0 };
    char* p = buffer;
    int   i;
    
    while (*str1)
        ++table[*str1++];
    while (*str2)
        ++table[*str2++];
    for (i = 0; i < 256; ++i)
        if (table[i])
            *p++ = i;
    *p = '\0';
    return buffer;
}

int main(void)
{
    char buffer[1024];
    puts(and_buffer("abcdde", "bcdfg", buffer));
    char* result = and_dynamic("abcdde", "bcdfg");
    puts(result);
    free(result); /* Don't forget this */
    return 0;
}
查表即可,简洁就是美。

[ 本帖最后由 lz1091914999 于 2012-8-28 22:23 编辑 ]

My life is brilliant
2012-08-28 22:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 16楼 lz1091914999
其实利用表已经可以保持两个字符串中字符的原序了,何乐而不为呢。另外 TonyDeng 也提了,万一是中英文夹杂的话,打表就不是太可行。不过我觉得不用考虑 T版 说的这种情况。

8楼 还特意强调了一下假设不越界的问题,所以我就说他考虑的还算是全面了。只不过一般来说不能假设它成立,那个要么动态分配,要么要求调用者提供一个。总之不是算法问题了。


2012-08-28 22:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
与其strcat(),不如直接从两个串中捡字符过去,这是8楼的第一个问题。其次是他想当然用哪个字符串返回结果是不行的,不过这其实是函数原型设计本身就有缺陷,需求不清。中英文夹杂也是可以的,谁叫他写程序不习惯使用wchar_t类型,死守char,又是所谓的标准C观念。

[ 本帖最后由 TonyDeng 于 2012-8-28 22:49 编辑 ]

授人以渔,不授人以鱼。
2012-08-28 22:48
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 18楼 TonyDeng
是的。8楼的方案只是一个勉强还算可行的办法,并没有说它好。
2012-08-28 22:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
所以,我第一提醒要搞清楚需求,第二要整理思路(用直接代码就行了,不要玩技巧)。

授人以渔,不授人以鱼。
2012-08-28 22:56
快速回复:求两个字符串的并集的c语言程序?
数据加载中...
 
   



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

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