C - 字符串递归

标签 c string pointers recursion

我正在尝试用C编写一个函数,它获取2个指针,一个指针指向字符串中的第一个字符,另一个指针指向字符串中的中间字符。该函数需要检查字符串的前半部分与后半部分是否相同(忽略大小写)并返回“TRUE”“FALSE”

我不知道是什么阻止了递归的条件以及为什么它不起作用。

这是我的代码。错误是什么?

#define SIZE 80
enum { FALSE = 0, TRUE = 1 };

int CheckString(char* start, char* middle);

int main()
{
    char str[SIZE], *pstart, *pmiddle;

    printf("Enter a String-->:");
    fgets(str, SIZE, stdin);

    pstart = &str[0];
    pmiddle = &str[(strlen(str) - 1) / 2];

    printf("  %d \n", CheckString(pstart, pmiddle));

    return 0;
}

int CheckString(char* start, char* middle)
{
    if (middle == '\0');
    return TRUE;

    if ((*start == *middle) || (*start == *middle + 32) || (*start == *middle - 32))
        CheckString(start + 1, middle + 1);
    else
        return FALSE;
}

我将其更改为此代码

int CheckString(char* start, char* middle)
{   
    if ((*start == *middle) || (*start == *middle + 32) || (*start == *middle - 32))
    {
        CheckString(start + 1, middle + 1);
        return TRUE;
    }
    else
        return FALSE;
}

现在它可以工作,但仅适用于第一个字符和中间它不会移动以检查下一个字符 帮助某人穿什么???

最佳答案

正如@some-programmer-dude所说,pstartpmiddle只是被分配了str[0]值的字符变量> 和 str[(strlen(str) - 1)/2] 而不是它们各自的地址。在该函数中,您传递 pmidpstart 的地址。您应该按如下方式更改代码-

替换 pmid 和 pstart。相反,将它们更改为指针 -

char* pstart,pmid;
pstart = &str[0];
pmiddle = &str[(strlen(str) - 1) / 2];

关于C - 字符串递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219657/

相关文章:

将字符串中的一个字符更改为字符串

c++如何通过引用返回 vector ?

c++ - C++ 实现中 "invalid pointer value"转换的文档

c - 程序检查给定数字是否存在于所有数字按升序排列的数组中

c - 使数组用户输入特定于冒泡排序?

c - C中 double 组的优化总和

ios - 无法理解 NSError/NSObject 指针传递行为

android - 从 Android 代码定义 C 宏

string - 使用 Sed 获取第 N 个字符

r - 加速 R 中的循环以消除数据帧中的部分字符串