检查两个字符串是否是 C 中的排列

标签 c string

我实际上是在尝试编写一些程序来检查两个字符串是否相互排列。我解释:

如果我考虑:

Eagle

Hdjoh

(我在上一个问题中使用了这两个示例)。

我得到一个排列,排列参数是 3。为什么?因为在字母表中:E + 3 = H,a + 3 = d 等。

我使用了 unsigned char,因为如果我在其中一个字符串中得到一个 z,我希望(例如)z + 3 = c。


我开始做什么:

#include <stdio.h>
#define N 20

int my_strlen(unsigned char *string){
    int length;
    for (length = 0; *string != '\0'; string++){
        length++;
    }
    return(length);
}

int main()
{
    unsigned char string1[N], string2[N];
    int test=0, i=0, length1, length2;
    scanf("%s", string1);
    scanf("%s", string2);

    length1=my_strlen(string1);
    length2=my_strlen(string2);

    if(length1==length2){
        for(i=0; i<length1; i++){
            if(string1[i]==string2[i]){
                test=1;
                }
                else{
                    test=0;
                }
        }
        printf("Test = %d", test);
    }
    else{
        printf("Error");
    }

    return 0;
}

我刚刚开始考虑。所以目前我只是试着逐个字母地比较这两个字符串。

问题:如果我尝试比较Hellohello,或者Hello Helqo 我得到 Test = 1。

所以有人可以告诉我这里出了什么问题吗?

非常感谢。


编辑 1:

#include <stdio.h>
#define N 20

int my_strlen(unsigned char *string){
    int length;
    for (length = 0; *string != '\0'; string++){
        length++;
    }
    return(length);
}

int main()
{
    unsigned char string1[N], string2[N];
    int test=0, i=0, length1, length2;
    scanf("%s", string1);
    scanf("%s", string2);

    length1=my_strlen(string1);
    length2=my_strlen(string2);

    if(length1==length2){
        for(i=0; i<length1; i++){
            if(string1[i]==string2[i]){
                test=1;
                }
                else{
                    test=0;
                    break;
                }
        }
        printf("Test = %d", test);
    }
    else{
        printf("Error");
    }

    return 0;
}

现在是正确的。我会继续。


编辑 2 - 6.7.14:

我实际上是在工作和程序的“第二部分”。我正在寻找 d 并验证它是否是排列。没那么容易,所以我需要一些建议,我是否必须编写其他函数来执行此操作?或者只是处理我的这部分代码:

if(length1==length2){
            for(i=0; i<length1; i++){
                if(string1[i]==string2[i]){
                    test=1;
                    }
                    else{
                        test=0;
                        break;
                    }
            }
            printf("Test = %d", test);
        }
        else{
            printf("Error");
        }

        return 0;
    }

我暂时是这样写的:

if(length1==length2){
        for(i=0; i<length1; i++){
                for(d=0; d<255; d++){
                    if(string1[i]==string2[i] + d){
                        permutation=1;
                }
                else{
                    permutation=0;
                    break;
                }
                }
        }
        printf("\nPermutation = %d \nd = %d", permutation, d);
    }
    else{
        printf("Not a permutation");
    }

    return 0;
}

(我知道这行不通,但我只是试过..)。

预先感谢您的帮助。

最佳答案

您只是打印出最后一个字符比较的结果。

for(i=0; i<length1; i++){
            if(string1[i]==string2[i]){
                test=1;
                }
                else{
                    test=0;
                }
}

这每次都要经过比较每个字符和变化的测试。循环结束时,只输出最后一个字符比较。

关于检查两个字符串是否是 C 中的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088466/

相关文章:

C 结构体中多个不同的 union

c - 使用 select 和 accept 启动新的文件描述符

c - 将虚拟内存映射到虚拟内存

c - 如何将命令行参数传递给 C 函数

c++:ifstream打开问题,为文本文件名传递字符串

c - 将循环计数器字符串化以引用 C 结构体的成员

string - 随机字母返回空白

string - 基于字符串调用函数

c++ - 字符串输出给出奇怪的字母

c - 如何将一个字符串中的单个字符分配给C中的另一个字符串?