我需要构建一个名为one
的递归函数,它有两个指针,char *S1
和char *s2
,它们是指向2个字符串的指针
如果只有1个字符存在差异,则该函数返回1
和printf
。
例如:
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);
}
}
答案 0 :(得分:1)
您无需获取字符串的长度。您需要关注的只有三种情况:
情况#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;
}