检查字符串是否相同

时间:2016-08-29 21:49:58

标签: c recursion

我需要构建一个名为one递归函数,它有两个指针,char *S1char *s2,它们是指向2个字符串的指针

如果只有1个字符存在差异,则该函数返回1printf

例如:

s1=abcde
s2=abcdf

\\return 1

s1=abc
s2=abc

\\return 0

我编写代码并且它几乎正常工作,当s1="dor"s2="dors"功能无效时。

但是当s2="dors"s1="dor"工作时。我不能使用静态,所以我试着在字符串的末尾保存差值计数器(告诉字符串长度< 50所以我分配了s1[52]s2[52]

int one(char* s1, char* s2){
    int Length1,Length2;
    Length2=(int)(strlen(s2));
    Length1=(int)(strlen(s1));
    if(Length1<Length2){
        if((*s1=='\0')&&(*s2=='\0')&& *(s2+Length2)=='1'){
            printf("1\n");
            return 1;
        }

            return one(s1+1,s2+1);
        }
        else{
            if(*(s2+Length2)=='1')
            {printf("0\n");
                return 0;
            }

            *(s2+Length2)='1';
            return one(s1+1, s2+1);
        }
    }

2 个答案:

答案 0 :(得分:1)

您无需获取字符串的长度。您需要关注的只有三种情况:

  1. 两个字符串都是空的,然后它们是相等的,所以你返回0。
  2. 每个字符串的第一个字符不同,因此您返回1.
  3. 第一个字符是相同的,你需要从每个字符串的第二个字符开始递归。
  4. 情况#2将处理字符串长度不同的情况,因为当你在递归期间到达较短字符串的末尾时,它的第一个字符将是'\ 0',而另一个字符串的第一个字符将是别的什么。

    int one(char *s1, char *s2) {
        if (*s1 == '\0' && *s2 == '\0') {
            return 0;
        } else if (*s1 != *s2) {
            return 1;
        } else {
            return one(s1+1, s2+1);
        }
    }
    

答案 1 :(得分:1)

如果在其他相同的字符串中只有一个不同的字符或一个附加字符,则应该打印1。如果字符串相同或差异为两个或更多,则将打印0

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

#define SIZE 100

int one ( char *a, char *b, int diff) {

    int alen = strlen ( a);
    int blen = strlen ( b);

    if ( abs ( alen - blen) > 1 || diff > 1) {//more than one difference
        printf ( "0\n");
        return 0;
    }

    if ( !*a && !*b) {//end of the two strings
        printf ( "%d\n", diff);
        return diff;
    }
    if ( *b != *a) {//a difference
        diff++;
        //increment the longer string
        if ( strlen ( a) < strlen ( b)) {
            return one ( a, ++b, diff);
        }
        if ( strlen ( b) < strlen ( a)) {
            return one ( ++a, b, diff);
        }
    }
    return one ( ++a, ++b, diff);
}

int main()
{
    char first[SIZE] = { '\0'};
    char second[SIZE] = { '\0'};
    while ( 1) {
        printf ( "\nenter x to exit or\n");
        printf ( "enter first  string: ");
        fflush ( stdout);//make sure prompt is printed
        if ( !( fgets ( first, SIZE, stdin))) {
            printf ( "problem getting input\n");
            exit ( 1);
        }
        if ( strcmp ( first, "x\n") == 0) {
            break;
        }
        printf ( "enter second string: ");
        fflush ( stdout);//make sure prompt is printed
        if ( !( fgets ( second, SIZE, stdin))) {
            printf ( "problem getting input\n");
            exit ( 1);
        }
        if ( strcmp ( second, "x\n") == 0) {
            break;
        }
        printf ( "\nresult from \"one\" is %d\n", one ( first, second, 0));
    }
    return 0;
}