比较c中的2个字符串递归
compare 2 string recursive in c
我写了一个函数来获取 2 个字符串并递归比较它,有一些规则:如果有双字母或小而不是 capital/opposite 它是 return 1
,否则 0
。它应该 return 1
如果 s1
是大写字母或小写并且 s
是相反的但不知道如何,我试过 *s-32/*s+32
但我无法确定使用哪个或何时使用。
这是函数代码:
int CompareS(char *s, char *s1)
{
if (*s == NULL && *s1==NULL)
return 1;
if (strncmp(s, s1, 1) != 0 )
{
if (strncmp(s, s - 1, 1) == 0)
return CompareS(s + 1, s1);
else
return 0;
}
else
return CompareS(s + 1, s1 + 1);
}
我真的很喜欢这个问题,所以我决定 试一试。这是带有注释的代码。所以我就这样
return 0
: 两个字符串相等
return -1
:两个字符串 NOT 等于
return -2
: 一个或两个指针是 NULL
指针
#include <string.h> //to use the strcmp() function
#include <stdio.h>
#include <ctype.h> // tolower() function in order to ignore the
// lower and upper cases
int CompareS(char *s, char *s1)
{
// if one of the pointer is a NULL pointer return directly -2
// in order to stop the process
if(s==NULL || s1==NULL)
return -2;
// if the function strcmp return 0 this means that the rest of
// the two strings are identical
if(strcmp(s,s1)==0)
return 0;
// we need to see the next character to know which pointer
// will be incremented in the next recursive call
if(tolower(s[0])==tolower(s1[0]) && tolower(s[0])==tolower((s1+1)[0]))
CompareS(s, ++s1);
else if(tolower(s[0])==tolower(s1[0]) && tolower(s1[0])==tolower((s+1)[0]))
CompareS(++s, s1);
else if(tolower(s[0])==tolower(s1[0]))
CompareS(++s, ++s1);
else
return -1;
}
此程序对字符串 hello
和 HeLLlloOOO
的微型测试
int main()
{
char str[100]="hello",s[100]="HeLLlloOOO";
printf("the result of comparison is %d\n",CompareS(s, str));
return 0;
}
给出
the result of comparison is 0
希望对您有所帮助!
我写了一个函数来获取 2 个字符串并递归比较它,有一些规则:如果有双字母或小而不是 capital/opposite 它是 return 1
,否则 0
。它应该 return 1
如果 s1
是大写字母或小写并且 s
是相反的但不知道如何,我试过 *s-32/*s+32
但我无法确定使用哪个或何时使用。
这是函数代码:
int CompareS(char *s, char *s1)
{
if (*s == NULL && *s1==NULL)
return 1;
if (strncmp(s, s1, 1) != 0 )
{
if (strncmp(s, s - 1, 1) == 0)
return CompareS(s + 1, s1);
else
return 0;
}
else
return CompareS(s + 1, s1 + 1);
}
我真的很喜欢这个问题,所以我决定 试一试。这是带有注释的代码。所以我就这样
return 0
: 两个字符串相等
return -1
:两个字符串 NOT 等于
return -2
: 一个或两个指针是 NULL
指针
#include <string.h> //to use the strcmp() function
#include <stdio.h>
#include <ctype.h> // tolower() function in order to ignore the
// lower and upper cases
int CompareS(char *s, char *s1)
{
// if one of the pointer is a NULL pointer return directly -2
// in order to stop the process
if(s==NULL || s1==NULL)
return -2;
// if the function strcmp return 0 this means that the rest of
// the two strings are identical
if(strcmp(s,s1)==0)
return 0;
// we need to see the next character to know which pointer
// will be incremented in the next recursive call
if(tolower(s[0])==tolower(s1[0]) && tolower(s[0])==tolower((s1+1)[0]))
CompareS(s, ++s1);
else if(tolower(s[0])==tolower(s1[0]) && tolower(s1[0])==tolower((s+1)[0]))
CompareS(++s, s1);
else if(tolower(s[0])==tolower(s1[0]))
CompareS(++s, ++s1);
else
return -1;
}
此程序对字符串 hello
和 HeLLlloOOO
int main()
{
char str[100]="hello",s[100]="HeLLlloOOO";
printf("the result of comparison is %d\n",CompareS(s, str));
return 0;
}
给出
the result of comparison is 0
希望对您有所帮助!