| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1324 人关注过本帖
标题:我能稍微做个伸手党吗...不能就删帖 请版主大人手下留情啦
只看楼主 加入收藏
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

int cmp(const void *a, const void *b)
{
    return *(char *)a - *(char *)b;
}
int main(void)
{
    char A[50], B[50];
    printf("Enter string A: ");
    gets(A);
    printf("Enter string B: ");
    gets(B);
    //由于没有重复的字符,因此只要把A中在B出现的字符删除,排序输出
    for (int i = 0; A[i] != '\0'; i++)
        for (int j = 0; B[j] != '\0'; j++)
            if (toupper(A[i]) == toupper(B[j]))
            {
                for (int k = i; A[k] != '\0'; k++)
                    A[k] = A[k + 1];
                i--;  //增加这个,以抵消数组元素移动后漏过比较,抵消i++
                continue;
            }
    if (A[0] == '\0')
        printf("NULL\n");
    else
    {
        int n;
        for (n = 0; A[n] != '\0'; n++)
            ;
        qsort(A, n, sizeof(char), cmp);
        puts(A);
    }

    return 0;
}


修改了一下,不过建议楼主换个新的IDE

[此贴子已经被作者于2017-3-22 11:46编辑过]

2017-03-21 16:16
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
收藏
得分:0 
完整题目:【问题描述】

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

【输入形式】

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

【输出形式】

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

【输入样例】

Ni Hao,Lu!
hi wang!

【输出样例】

,Lou

【样例说明】

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




用了楼上版主……?!大佬的程序是这样哒
测试数据    测试结果
测试数据1    完全正确
测试数据2    输出错误  
错误输出:
期望输出:
NULL
测试数据3    完全正确
测试数据4    完全正确
测试数据5    完全正确
就是少了一种情况 求帮忙加 我的能力添加之后所有的结果都是NULL……
求大佬再帮忙加一下啦QAQ
2017-03-21 18:18
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
收藏
得分:0 
回复 11楼 yanzy
你这个不知道为什么在放我这错挺多的……我也不太会改 估计是编译器问题……?
C:\Users\Admin\Desktop\99999999999999.c(17) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(17) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(17) : error C2143: syntax error : missing ')' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(17) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(17) : error C2065: 'i' : undeclared identifier
C:\Users\Admin\Desktop\99999999999999.c(17) : warning C4552: '!=' : operator has no effect; expected operator with side-effect
C:\Users\Admin\Desktop\99999999999999.c(17) : error C2059: syntax error : ')'
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2143: syntax error : missing ';' before 'for'
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2143: syntax error : missing ')' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2065: 'j' : undeclared identifier
C:\Users\Admin\Desktop\99999999999999.c(18) : warning C4552: '!=' : operator has no effect; expected operator with side-effect
C:\Users\Admin\Desktop\99999999999999.c(18) : error C2059: syntax error : ')'
C:\Users\Admin\Desktop\99999999999999.c(19) : error C2143: syntax error : missing ';' before 'if'
C:\Users\Admin\Desktop\99999999999999.c(21) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(21) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(21) : error C2143: syntax error : missing ')' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(21) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Admin\Desktop\99999999999999.c(21) : error C2065: 'k' : undeclared identifier
C:\Users\Admin\Desktop\99999999999999.c(21) : warning C4552: '!=' : operator has no effect; expected operator with side-effect
C:\Users\Admin\Desktop\99999999999999.c(21) : error C2059: syntax error : ')'
C:\Users\Admin\Desktop\99999999999999.c(22) : error C2146: syntax error : missing ';' before identifier 'A'
C:\Users\Admin\Desktop\99999999999999.c(23) : error C2044: illegal continue
执行 cl.exe 时出错.
2017-03-21 18:20
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
收藏
得分:0 
回复 6楼 吹水佬
测试数据    测试结果
测试数据1    完全正确
测试数据2    输出错误  
错误输出:
期望输出:
NULL
测试数据3    完全正确
测试数据4    完全正确
测试数据5    完全正确
就是少了一种情况 求帮忙加 我的能力添加之后所有的结果都是NULL……
求大佬再帮忙加一下啦QAQ
2017-03-21 18:21
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:30 
回复 14楼 Aa1060030551
哦,要输出NULL,试试这样:
#include <stdio.h>
#include <ctype.h>
main()
{
    char a[51], b[51], c[256]={0}, *p;
    gets(a);
    gets(b);
    for (p=a; *p; p++)
       if (c[toupper(*p)] == 0)
           c[toupper(*p)] = 1;
       else
           return; //重复
    for (p=b; *p; p++)
       if (c[toupper(*p)] == 1)
           c[toupper(*p)] = 0;
    for (p=a; *p; p++)
       if (c[toupper(*p)] == 1)
            break;
    if (!*p)
    {
        printf("NULL");
        return;
    }
    for (; *p; p++)
       if (c[toupper(*p)] == 1)
       {
           c[toupper(*p)] = 0;
           c[*p] = 1;
        }
    int i;
    for (i=0; i<256; i++)
       if (c[i] == 1)
            printf("%c", i);
}
2017-03-21 19:27
快速回复:我能稍微做个伸手党吗...不能就删帖 请版主大人手下留情啦
数据加载中...
 
   



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

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