| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 704 人关注过本帖
标题:将字符串中重复的删去,我做了两套,有一套不行,why ?求大神帮我!!
只看楼主 加入收藏
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
收藏
得分:0 
再顶!
2014-06-10 00:25
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
收藏
得分:0 
自顶了
2014-06-10 00:33
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
选对教材可能是有帮助的,先看《C程序设计语言》到高考程度再考虑其它问题吧

梦想拥有一台龙芯3A-4000
2014-06-10 00:34
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
刚才忘了提醒,是下面的链接:

http://product.

梦想拥有一台龙芯3A-4000
2014-06-10 00:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
这个出题者智商低于80,建议楼主换本书。
一般出题,要么用文字将需求描述清楚,要么用示例来剔除歧义。
但这家伙给的例子,能看出是
a. 处理后的字符串 中 字符按字典顺序排序
b. 处理后的字符串 中 字符按在原串中出现的先后顺序排序
c. 处理后的字符串 中 字符无顺序要求
中哪一种吗?


现在假设是以最难的“b. 处理后的字符串 中 字符按在原串中出现的先后顺序排序”来做,有两种做法

方法一:假设字符值在ASCII范围内
可以弄个标记 bool mark[256] = { 0 };
然后遍历原字符串,if( 这个字符在mark数组中已经出现,即 mark[(unsigned char)c]==1 ) 说明这个字符已经出现过了,忽略;否则 保留这个字符,并设 mark[(unsigned char)c]=1。
(为什么是mark[(unsigned char)c]而不是mark[c]你明白吧?!因为C/C++标准没有规定char是有符号的-128到+127,也没规定char是无符号的0到255)

方法二:
从头到尾遍历s中的每个字符,并将其后的相同字符置为0
输出s中的每个不是0的字符
(这种方法可以用在ASCII范围之外的字符上)
2014-06-10 08:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
以下是引用lol1234在2014-6-9 22:34:18的发言:

#include <stdio.h>
#include <string.h>
void main()
{    char s1[200],s2[200]="";
    int i,j,k=1,flag=0;
    printf("请输入字符串:");
    gets(s1);
    s2[0]=s1[0];
    s2[1]='\0';
    for(i=0;s1!='\0';i++)
    {    for(j=0;s2[j]!='\0';j++)
        {    if(s1==s2[j])
            {   
                flag=1;
                break;
            }
        }
        if(flag=0)
        {   
            s2[k++]=s1;
            s2[k]='\0';
        }
        flag=0;
    }
    s2[k]='\0';
    puts(s2);
}




第一套是可以的,我主要想请大神们帮我看看以上的这个  就是没用strchr的,哪错了?初学者。。!!尽力了。。找不出,不知道哪里混乱了



简单的改了改  相信如果仍有bug 你自己可以搞定它

程序代码:
#include <stdio.h>
//#include <string.h>

void main()
{ 
    char s1[200]={'\0'};
    char s2[200]={'\0'};
    int i,j,k=0,flag=0;
    printf("请输入字符串:");
    gets(s1);
    s2[0]=s1[0];
    //s2[1]='\0';
    for(i=1;s1[i]!='\0';i++)
    { 
        for(j=0;s2[j]!='\0';j++)
        {   
            if(s1[i]==s2[j])
            {    
                flag=1;
                break;
            }
        }
        if(flag==0)  // ==  or =
        {    
            s2[++k]=s1[i];
            //s2[k]='\0';
        }
        flag=0;
    }
    //s2[k]='\0';
    puts(s2);
}

DO IT YOURSELF !
2014-06-10 09:14
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:0 
if(flag==0)

if里面应该放判断语句 BOOL类型

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-06-10 09:37
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
收藏
得分:0 
回复 16 楼 wp231957
程序代码:
#include <stdio.h>
void main()
{ 
    char s1[200];
    char s2[200]="";
    int i,j,k=1,flag=0;
    printf("请输入字符串:");
    gets(s1);
    s2[0]=s1[0];
    s2[1]='\0';
    for(i=1;s1[i]!='\0';i++)
    { 
        for(j=0;s2[j]!='\0';j++)
        {   
            if(s1[i]==s2[j])
            {    
                flag=1;
                break;
            }
        }
        if(flag==0) 
        {    
            s2[k++]=s1[i];
            s2[k]='\0';
        }
        flag=0;
    }
    s2[k]='\0';
    puts(s2);
}
   我照着你的改了一下 可以了  不知道为什么当时写出那么多错误、、可能当时太累了  谢谢你!
2014-06-11 20:29
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
收藏
得分:0 
回复 15 楼 rjsp
好的!谢谢你!
2014-06-11 20:30
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
收藏
得分:0 
谢谢各位!!!
2014-06-11 20:31
快速回复:将字符串中重复的删去,我做了两套,有一套不行,why ?求大神帮我!! ...
数据加载中...
 
   



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

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