| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4347 人关注过本帖
标题:怎们编写这个C语言程序
只看楼主 加入收藏
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void word(char *s1, char *s2) {
    puts("Input 1st word:");
    scanf("%80[a-zA-Z]", s1);

    while(getchar()  != '\n') continue;

    puts("Input 2nd word:");
    scanf("%80[a-zA-Z]", s2);

    if(strlen(s1) != strlen(s2)) {
        printf("No!\n");
        exit(EXIT_FAILURE);
    }
}

int cmp(const char *s1, const char *s2) {
    int a[80] = {0}, b[80] = {0};
    int i, j, flag = 0;

    for(i = 0; s1[i] != '\0' && i < 80; i++) {
        if(s1[i] >= 97) a[i] = s1[i];

        else a[i] = s1[i] + 32;

        if(s2[i] >= 97) b[i] = s2[i];

        else b[i] = s2[i] + 32;
    }

    for(i = 0; a[i] && i < 80; i++) {
        for(j = 0; j < 80; j++) {
            if(a[i] == b[j]) {
                b[j] = 0; 
                break;
            }
        }
    }

    for(i = 0; i < 80; i++)
        flag += b[i];

    return flag;
}


int main(void) {
    char s1[81] = {0}, s2[81] = {0};
    word(s1, s2);

    if(cmp(s1, s2)) printf("No!!\n");

    else printf("Yes...\n");

    return 0;
}


[ 本帖最后由 longwu9t 于 2015-3-24 20:41 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2015-03-24 16:30
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
使用排序解决这个问题,把事情变复杂了,我认为不能这么干。
2015-03-24 16:37
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
这是uva156的题目、、我把之前写的发到我博客上、地址: http://www.
UVA OJ地址:uva.

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-03-24 17:14
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
回复 11楼 longwu9t
for(i = 0; a[i] && i < 80; i++) {
        for(j = 0; j < 80; j++) {
            if(a[i] == b[j]) b[j] = 0;

            continue;
        }
    }
continue;似乎没有作用,可否如下
for(i = 0; a[i] && i < 80; i++) {
        for(j = 0; j < 80; j++) {
            if(a[i] == b[j])
  {   
     b[j] = 0;
     break;
  }
        }
    }
没有测试,见谅。
2015-03-24 18:27
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 14楼 jklqwe111
不行

你试着编译测试一下数据就理解了

Only the Code Tells the Truth             K.I.S.S
2015-03-24 18:46
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
回复 15楼 longwu9t
如你代码,当
if(a[i] == b[j]) b[j] = 0;
时,能终止对b的继续遍历吗
2015-03-24 19:15
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
回复 11楼 longwu9t
输入  "as"    "aa"
结果  yes
2015-03-24 20:01
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 17楼 jklqwe111
是我粗心大意了

代码已经在11楼修正了


程序代码:
for(i = 0; a[i] && i < 80; i++) {
        for(j = 0; j < 80; j++) {
            if(a[i] == b[j]) {
                b[j] = 0; 
                break;
            }
        }
    }

Only the Code Tells the Truth             K.I.S.S
2015-03-24 20:42
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
回复 18楼 longwu9t
其实那应该小问题,我认为你的代码应该有改进的地方,说下我的想法探讨一下,在遍历b[]时,如果没有找到与a[i]相同的字符,就应该认为s1与s2不符,因而可以结束对a[]的遍历,返回结果。以下是代码:
int cmp(const char *s1, const char *s2) {
    int a[80] = {0}, b[80] = {0};
    int i, j, flag = 0;
    int iseq;//加上一行
    for(i = 0; s1[i] != '\0'; i++) {
        if(s1[i] >= 'a') a[i] = s1[i];

        else a[i] = s1[i] + 32;

        if(s2[i] >= 'a') b[i] = s2[i];

        else b[i] = s2[i] + 32;
    }

    for(i = 0; a[i] && i < 80; i++) {
        iseq=0;//加上一行
        for(j = 0; j < 80; j++) {
            if(a[i] == b[j])

           {
                b[j] = 0;
                iseq=1;//加上一行
                break;
            }
        }
        if(iseq==0) return -1;//加上一行
        
    }

    for(i = 0; i < 80; i++)
        flag += b[i];

    return flag;
}
2015-03-24 22:26
铁钩银划
Rank: 2
等 级:论坛游民
帖 子:7
专家分:46
注 册:2014-10-28
收藏
得分:0 
#include<stdio.h>
#include<math.h>
void main()
{
    char  c[30],d[30];
    int k=0;
    gets(c);
    gets(d);
    for(int i=0;c[i]!=0;i++)
        for(int j=0;d[j]!=0;j++)
            if(c[i]-d[j]==0||c[i]-d[j]==32||c[i]-d[j]==-32)
            {
                k++;
                d[j]='0';
                break;
            }
    if(k==i)
        printf("Anagrams\n");
}
2015-03-24 23:11
快速回复:怎们编写这个C语言程序
数据加载中...
 
   



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

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