旋转的弦乐

sha*_*nan 3 c string substring

编写代码来检查,如果s2是旋转s1仅使用一个调用isSubString(即waterbottle是一个旋转erbottlewat).

我为此编写程序,但我无法获得所需的输出.请指导我哪里出错了.

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

int isRotated(char *s1, char *s2);
int isSubstring(char *s1, char *s2);

int isRotated(char *s1, char *s2)
{
        int r;
        char s[100];
        if(strlen(s1) == strlen(s2))
                strcpy(s, s1);
        r = isSubstring(s, s2);
        strcat(s, s1);
        return r;
}

int isSubstring(char *s1, char *s2){
        if(strstr(s1, s2))
                return 1;   
        else    
                return 0;
}

int main(void) {
        char s1[100], s2[100];
        printf("Enter the first String\n");
        scanf("%s", s1);
        printf("Enter the second String\n");
        scanf("%s", s2);

        if(isRotated(s1, s2)==1)
                printf("%s and %s are rotated string\n", s1, s2);
        else
                printf("%s and %s are not rotated string\n", s1, s2);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

nal*_*zok 5

要检查是否s2是旋转s1,您可能需要集中两个s1s,并尝试s2在新字符串中查找.

这是需要检查的长度s1s2.例如,s1是"ABCD",s2是"CDA".然后s是"AB CDA BCD".strstr(s, s2) == 1但显然,s2不是轮换s1.

另外,我想首先打电话strcmp(),因为我认为"ABCD"是"ABCD"本身的轮换.但是,这只是一个定义问题.

int isRotated(char *s1, char *s2)
{
        char s[199];
        if(strlen(s1) != strlen(s2))
                return 0;
        else if(strcmp(s1, s2) == 0)
                return 1;
        else
                strcpy(s, s1);
        strcat(s, s1);
        return isSubString(s, s2);
}
Run Code Online (Sandbox Code Playgroud)

BTW:"substring"是一个单词,因此可能更好地isSubString()改为isSubstring()