标题:字符串差集
只看楼主
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
结帖率:88.89%
已结贴  问题点数:20 回复次数:5 
字符串差集

【问题描述】

从键盘输入两个字符串A和B(每个字符串内都无重复字符)。求两个字符串的差集,即:将字符串A中与字符串B中相同的字符去掉(大小写无关,即同一字符的大小写认为是相同的字符)。然后按照ASCII码从小到大的顺序输出差集。若差集为空,则输出字符串:NULL。

【输入形式】

先从键盘输入字符串A,然后输入字符串B,每个字符串末尾都有回车换行符,但回车换行符不作为字符串的字符,并且每个字符串不超过50个字符。

【输出形式】

按照ASCII码从小到大的顺序输出字符串A减去字符串B的差集。

【输入样例】

Ni Hao,Lu!
hi wang!

【输出样例】

,Lou

【样例说明】

输入的字符串A为“Ni Hao,Lu!”,字符串B为“hi wang!”。字符串A中与字符串B相同的字符(大小写无关)有六个:’N’,’i’,’H’,’a’,’!’以及空格符,将这六个字符从A中去掉,按照ASCII码从小到大的顺序输出为:,Lou。


————————————————————以下是我写的代码,只能运行出来NULL,其他的数据都出错,请老爷们帮忙看看哪里出了问题—————————————————


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Paixxu(char *s)
{
    char t;
    for(int i = 0;i<strlen(s)-1;i++)
    {
        for(int j = i+1;j<strlen(s);j++)
        {
            if(s[i]>s[j])
            {
                t = s[i];
                s[i] = s[j];
                s[j] = t;
            }
        }
    }
}
int main()
{
    char A[51],B[51],C[51];
    int i,j,count=0;
    gets(A);
    gets(B);
    for(i=0;i<strlen(A)-1;i++)
    {
        for(j=0;j<strlen(B);j++)
        {
            if(A[i]==B[j] || A[i]==B[j]+'32' || A[i]==B[j]-'32')
                break;
            else
                C[count++] = A[i];
        }
    }
    C[count] = '\0';
    if(strlen(C))
    {
        Paixxu(C);
        printf("%s",C);
    }
    else
        printf("NULL");
    return 0;
}
搜索更多相关主题的帖子: 字符串 输入 输出 字符 strlen 
2020-04-29 13:00
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:8 
程序代码:
for(j=0;j<strlen(B);j++)
        {
            if(A[i]==B[j] || A[i]==B[j]+'32' || A[i]==B[j]-'32')
                break;
            else
                C[count++] = A[i];
        }

这段代码
你的C大几率overflow了
C的赋值应该在子循环外面 ,而不是里面,  应该是子循环都找不到时再记录下来
2020-04-29 13:52
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 2楼 fulltimelink
是的,有这个问题,谢谢你。

今天再晚也是早,明天再早也是晚
2020-04-29 14:29
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
我更改了代码,可是还是有数据不正确(基本都对了),可以帮忙看看吗?

————————————————|
测试数据4    输出错误            |
错误输出:                      |
?BEGJM                          |
期望输出:                      |
?BEGJMN                         |
————————————————|

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void Paixxu(char *s)
{
    char t;
    for(int i=0;i<strlen(s);i++)
    {
        for(int j=i+1;j<strlen(s);j++)
        {
            if(s[i]>s[j])
            {
                t = s[i];
                s[i] = s[j];
                s[j] = t;
            }
        }
    }
}
int main()
{
    char A[51],B[51];
    int i,j;
    gets(A);
    gets(B);
    for(i=0;A[i]!='\0';i++)
    {
        for(j=0;B[j]!='\0';j++)
        {
            if(abs(A[i]-B[j])==0 || abs(A[i]-B[j])==32)
            {
                for(int k=i;k<strlen(A);k++)
                    A[k] = A[k+1];
                for(int k=j;k<strlen(B);k++)
                    B[k] = B[k+1];
                i--;
                j--;
                break;
            }
         }
    }
    if(strlen(A))
    {
        Paixxu(A);
        puts(A);
    }
    else
        printf("NULL");
    return 0;
}

今天再晚也是早,明天再早也是晚
2020-04-29 17:45
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:12 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void Paixxu(char *s,size_t len)
{
    char t;
    for(size_t i=0; i<len; i++)
    {
        for(size_t j=i+1; j<len; j++)
        {
            if(s[i]>s[j])
            {
                t = s[i];
                s[i] = s[j];
                s[j] = t;
            }
        }
    }
}
int main()
{
    char A[51],B[51];
    int i,j;
    gets(A);
    gets(B);
    for(i=0; A[i]!='\0'; i++)
    {
        for(j=0; B[j]!='\0'; j++)
        {
            if(abs(A[i]-B[j])==0 || abs(A[i]-B[j])==32)
            {
                for(size_t k=i; k<strlen(A); k++)
                    A[k] = A[k+1];
                for(size_t k=j; k<strlen(B); k++)
                    B[k] = B[k+1];
                i--;
                j--;
                break;
            }
        }
    }
    if(strlen(A))
    {
        Paixxu(A,strlen(A));    //这个地方要把长度一起传递过去的,在子函数里A只是个指针,长度只是一个指针的长度。
        puts(A);
    }
    else
        printf("NULL");
    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-04-29 19:01
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 5楼 纯蓝之刃
感谢!

今天再晚也是早,明天再早也是晚
2020-05-05 17:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501328-1-1.html




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

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