没有输出(期望布尔输出)

getting no output (expecting boolean output)

所以我尝试不使用 string.h 文件。我创建了有效的字符串长度函数。然后我创建了一个函数来检查两个函数是否相同,但我没有得到任何输出。 我已经测试了字符串长度函数并且有效。我不确定我在第二个功能中做错了什么。错误请指出。

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

char stringLength(char userString[])
{
    int i=0,count=0;
    while (userString[i] != '[=10=]')
    {
        count = (count + 1);
        i = (i + 1);
    }
    return count;

}


bool stringCheck (char a[], char b[])
{
    bool isEquals = false;
    if (stringLength(a) == stringLength(b))
    {
        int i=0, count=0;
        while (i<stringLength(a))
        {
            if (a[i] == b[i])
            {
                count+=1;
            }

            i+=1;
        }

        if (count == stringLength(a))
            isEquals = true;
        else
            isEquals = false;
    }
    else
        isEquals = false;

    return isEquals;
}

int main()
{
    stringCheck("abcd", "abcd");
    return 0;
}

功能有效。

只是你没有捕捉到 stringCheck() 函数的 return 值。您可以如下所示进行操作。

bool strMatch = stringCheck("abcd", "abcd");
if(true == strMatch)
{
    // Do something when the strings are same
}
else
{
    // Do something else otherwise
}

此外,作为一项改进 - 在 stringCheck() 函数中,您有一个循环

while (i < stringLength(a))

这没有什么问题,但是您可以通过将字符串的长度保存到一个变量中并在 while 循环中使用该变量进行轮询来提高代码的效率。 在 stringCheck 函数中:

int i=0, count=0;
char strLength = stringLength(a);
while (i < strLength)

这会起作用,因为字符串的长度在循环中不会改变。

我发现 stringLength() 功能有问题。首先是,用于变量 return 长度 count 的数据类型是 int 而为函数设置的 return 类型是 char。此外,考虑将函数 stringLength() 的 return 类型更改为 size_t 以及同一函数中变量 count 的数据类型。

char stringLength(char userString[])

size_t stringLength(char userString[])

将 return 类型设为 char,如果字符串的长度超过 127 个字节,您的函数将出现异常。

stringLength()功能的下一个改进是,icount似乎是同时更新的。当您可以简单地 return i 代替 count.

时,我不明白为什么您需要两个变量

如果您使用某些 gcc 标志(例如 -Wall 开始编译您的代码,您的编译器会警告您所有这些要点。

正如@WedaPashi 所说,您的代码有效。你只需要使用结果。

但是你的代码太复杂了。绝对没有理由在第一个函数中使用两个变量。此外,第一个函数不应 return 一个字符(除非您希望该函数不适用于长度超过 127 或 255 个字符的字符串)使用 int 或最好使用 size_t 代替。这样做:

size_t stringLength(char userString[])
{
    int count=0;
    while (userString[i] != '[=10=]') 
        count++;

    return count;
}

对于你的第二个函数,比较它们的长度只是浪费时间。这是一个更简单的实现:

bool stringCheck (char a[], char b[])
{
    size_t index = 0;
    while(a[index] != '[=11=]') {
        if(a[index] != b[index]) return false;
        index++;
    }

    return true;
}

如果你愿意,你还可以添加一些检查参数是否为空指针。

您没有使用 main

中函数 stringCheck 的 return 值
int main()
{
    stringCheck("abcd", "abcd");
    return 0;
}

至少你可以写出例子

int main( void )
{
    printf( "Strings are %sequal\n", stringCheck("abcd", "abcd") ? "" : "not " );
    return 0;
}

除此之外,您的代码非常低效,通常甚至可以调用未定义的行为。

例如,函数 stringLength 将 return 长度超过 127255 个字符的字符串长度不正确,具体取决于类型 char表现为 signed charunsigned char.

类型

函数应该这样声明

size_t stringLength( const char userString[] )
{
    size_t count = 0;

    while ( userString[count] != '[=12=]' ) ++count;

    return count;
}

或者例如在函数 stringCheck 中,函数 stringLength 在循环

中为变量 i 的每个值调用
    int i=0, count=0;
    while (i<stringLength(a))
             ^^^^^^^^^^^^

函数参数应使用限定符 const 声明,因为传递的字符串在函数内不会更改。

其实函数stringLength是多余的。不用函数stringLength就可以写出函数stringCheck,写起来就简单多了。

给你。

bool stringCheck( const char *s1, const char *s2 )
{
    while ( *s1 && *s1 == *s2 )
    {
        ++s1;
        ++s2;
    }

    return *s1 == *s2;
}