| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 897 人关注过本帖
标题:如何用指针解决(异构体)?
只看楼主 加入收藏
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
结帖率:89.47%
收藏
已结贴  问题点数:20 回复次数:8 
如何用指针解决(异构体)?
异构体是指两个字符串,有相同的字母组成,如果有不同的话仅有的不同点是字母的位置不一样。

例如:abcd和abcd,dcba,acdb都是异构体,但是abcd和abcde或qwer就不是异构体。

输入两个字符串(长度不超过50),判断这两个字符串是不是异构体,并且输出。如果是则输出YES,不是输出NO。

Sample Input:

abcd bcda
Sample Output:

YES
搜索更多相关主题的帖子: 字符串 如何 字母 
2016-12-05 15:36
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
先判断长度,长度一致时排序,然后判断两个字符串是否相等。
2016-12-05 15:54
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:15 
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void Sort(char a[])
{
    int i, j;
    char c;
    for (i = 0; i < strlen(a)-1; i++)
    {
        for (j = 0; j < strlen(a)-1; j++)
        {
            if (a[j] > a[j + 1])
            {
                c = a[j];
                a[j] = a[j + 1];
                a[j + 1] = c;
            }
        }
    }
}

int main() 
{
    int i = 0;
    char *a = malloc(50);
    char *b = malloc(50);

    scanf("%s",a);
    scanf("%s", b);
    if (strlen(a) != strlen(b))
    {
        printf("NO\n");
        return 0;
    }
    Sort(a);
    Sort(b);
    if (strcmp(a, b))
    {
        printf("NO\n");
    }
    else
    {
        printf("YES\n");
    }
    return 0;
}


[此贴子已经被作者于2016-12-5 16:20编辑过]

2016-12-05 16:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
如果字符串中只允许ASC字符的话,可以不排序(排序是个很耗时的操作),而是统计每个字符的数量
2016-12-05 16:26
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
收藏
得分:0 
回复 3楼 grmmylbs
我一直想不通如何去比较是否有相同的字符,看了你的程序才想到可以先排序再比较。
谢谢你了!
2016-12-05 16:50
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
收藏
得分:0 
回复 4楼 rjsp
如果不排序的话,应该怎么弄呢?
2016-12-05 16:51
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
收藏
得分:0 
回复 4楼 rjsp
如果去数字符的数量的话,会不会更麻烦?
2016-12-05 16:52
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
#include <stdio.h>
#include <string.h>

int cmp(char *s1, char *s2)
{
    if (strlen(s1) != strlen(s2))
        return 0;
    unsigned int a1[256]={0}, a2[256]={0};
    char *p=s1;
    for (; *p; p++) a1[(unsigned char)*p] += 1;
    p=s2;
    for (; *p; p++) a2[(unsigned char)*p] += 1;
    int i;
    for (i=0; i<256; i++)   
        if (a1[i] != a2[i])
            return 0;
    return 1;
}

main()
{
    char *s1="abcd一国", *s2="d一c国ba";
    printf("%s\n", (cmp(s1,s2)?"YES":"NO"));
    char *s3="abcd", *s4="abcde";
    printf("%s\n", (cmp(s3,s4)?"YES":"NO"));
}


[此贴子已经被作者于2016-12-5 21:39编辑过]

2016-12-05 21:19
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
收藏
得分:0 
回复 8楼 吹水佬
看不太懂,看来我得好好研究一下课本,理解一下指针这些东西。   
2016-12-05 22:47
快速回复:如何用指针解决(异构体)?
数据加载中...
 
   



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

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