| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6455 人关注过本帖
标题:编写程序:删除字符串S1中与字符串s2相同的字符,打印删除后的s1
只看楼主 加入收藏
如风似水
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-8-7
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:9 
编写程序:删除字符串S1中与字符串s2相同的字符,打印删除后的s1
在网上看到程序如下:
#include <stdio.h>
#include<string.h>
 squeeze(char* s1, const char* s2)
{
    int i=0;
    int j=0;
    for(i=0; i<strlen(s1); i++)
        for(j=0; j<strlen(s2); j++)
        {
            if(s1[i]==s2[j])
              s1[i]=' ';   
        }
}
int main()
{
    char a[100],b[100];
    printf("请输入s1:");
    scanf("%s",a);
    printf("请输入s2:");
    scanf("%s",b);
    squeeze(a,b);
    printf("删除后:%s\n",a);
    return 0;
}
思路应该是:相同的字符用空格表示,如:s1:abcdef   s2:abuehdgsd   删除后s1:  c  f
现在想实现目标为:顺序打印即从第一位没有空格的输出:即删除后s1:cf
应该如何改进,请高手指教。
搜索更多相关主题的帖子: 编写程序 include return 字符串 网上 
2013-08-08 09:03
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这个  源代码能看懂不

DO IT YOURSELF !
2013-08-08 09:09
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:15 
这样试试:
程序代码:
#include <stdio.h>
#include <string.h>

squeeze(char* s1, const char* s2)
{
    int i = 0,j = 0,k = 0;
    int flag = 0;
    char tm[100] = {0};
    int len1 = strlen(s1);
    int len2 = strlen(s2);

    for(i=0; i<len1; i++)
    {   
        flag = 1;
        for(j=0; j<len2 && flag; j++)
        {
            if(s1[i]==s2[j])
            {
                flag = 0;
            }
        }
        if(flag)
            tm[k ++] = s1[i];

    }

    strcpy(s1,tm);

}
int main()
{
    char a[100] = {0},b[100] = {0};
   
    printf("请输入s1:");
    scanf("%s",a);

    printf("请输入s2:");
    scanf("%s",b);
   
    squeeze(a,b);
   
    printf("删除后:%s\n",a);
    return 0;
}


其实不用两层循环也可以:
程序代码:
squeeze(char* s1, const char* s2)
{
    int i = 0,k = 0;
    int flag = 1;

    int len1 = strlen(s1);
    int len2 = strlen(s2);

    char tm[100] = {0};
    char sample[128] = {0};

    for(i = 0 ;i < len2 ; i ++)
        sample[s2[i]] = 1;    

    for(i = 0 ;i < len1 ;i ++)
    {
        flag = 1;
        if(sample[s1[i]])
            flag = 0;
        if(flag)
            tm[k ++] = s1[i];
    }
   
    tm[k] = 0;

    strcpy(s1,tm);

}



[ 本帖最后由 liufashuai 于 2013-8-8 11:57 编辑 ]

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-08 09:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:3 
假设
s1 为 "abc def ghi"
s2 为 "defineeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
要求输出为 "abc  ghi"
是这个意思吧?
所以你用空格是不对的,你的代码没有区分出是本来的空格,还是当标识用的空格。

如果题目要求只输入asc字符的话,可以用个256长的数组,来表示那些字符在s2中出现过。
否则的话,只能用更一般的方法
a. 将s2排序,去重复
b. 遍历s1,将s1中的每个字符在重复后的s2中用二分法查找
更好的方法是
a. 将s2去重复
b. 遍历去重复后的s2中的每个字符,删除s1中对应的字符

2013-08-08 09:28
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
你在加上一个判断不就好了

for(i=0;i<strlen(a);i++)
if(a[i]!=' ')
printf("%c",a[i]);

再试试

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-08 09:39
如风似水
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-8-7
收藏
得分:0 
回复 2楼 wp231957
源代码用空格代替相同字符,现在只想输出不同的字符,输出中不要空格  一个紧挨着一个输出

徜徉在代码的海洋中,不断汲取营养
2013-08-08 10:07
h13352825861
Rank: 2
来 自:中国
等 级:论坛游民
威 望:1
帖 子:39
专家分:72
注 册:2013-8-8
收藏
得分:2 
回复 楼主 如风似水
这个是正确的!
你的 scanf("%s",&a);少了个&!

#include <stdio.h>
#include<string.h>
squeeze(char* s1, const char* s2)
{
    int i=0;
    int j=0;
    for(i=0; i<strlen(s1); i++)
        for(j=0; j<strlen(s2); j++)
        {
            if(s1[i]==s2[j])
              s1[i]=' ';   
        }
}
int main()
{
    char a[100],b[100];
    printf("请输入s1:");
    scanf("%s",&a);
    printf("请输入s2:");
    scanf("%s",&b);
    squeeze(a,b);
    printf("删除后:%s\n",a);
    return 0;
}

相信汗水会让未来充满满了阳光!
2013-08-08 11:25
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
回复 楼主 如风似水
搂猪,洒家给的程序你没试试么?

看看是不是你想要的结果

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-08 12:02
如风似水
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-8-7
收藏
得分:0 
回复 8楼 liufashuai
谢高僧,是这样的

徜徉在代码的海洋中,不断汲取营养
2013-08-08 14:55
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
收藏
得分:0 
路过。。。

                             凡成大事者,各有各的方法论。
2013-08-08 16:01
快速回复:编写程序:删除字符串S1中与字符串s2相同的字符,打印删除后的s1
数据加载中...
 
   



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

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