没有得到任何输出期望布尔输出

问题描述

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

Triggers total runtime per day

解决方法

该功能有效。

这只是您没有捕获stringCheck()函数的返回值。您可以如下所示进行操作。

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()函数存在问题。首先,用于返回长度为count的变量的数据类型为int,而为函数设置的返回类型为char。另外,请考虑将函数stringLength()的返回类型更改为size_t,并将变量count的数据类型更改为同一函数。

char stringLength(char userString[])

size_t stringLength(char userString[])

返回类型为char时,如果字符串的长度超过127个字节,则您的函数将无法正常运行。

stringLength()函数的下一个改进是icount似乎是同时更新的。我想不出为什么只需简单地返回i代替count到那里就需要两个变量。

如果您使用-Wall之类的某些gcc标志编译代码,则您的编译器会警告您所有这些问题。

,

@ @WedaPashi说,您的代码有效。您只需要使用结果即可。

但是您的代码过于复杂。绝对没有理由在第一个函数中使用两个变量。另外,第一个函数不应返回char(除非您不希望该函数对长度超过127个或255个字符的字符串起作用),请改用int或最好使用size_t。这样做:

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

    return count;
}

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

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

    return true;
}

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

,

您没有使用stringCheck中的函数main的返回值

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

至少您可以写个例子

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

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

例如,函数stringLength将返回不正确的字符串长度,这些字符串的长度超过127255个字符,具体取决于类型char是否像类型{{ 1}}或signed char

函数应声明为

unsigned char

或者例如在函数size_t stringLength( const char userString[] ) { size_t count = 0; while ( userString[count] != '\0' ) ++count; return count; } 中,对于循环中变量stringCheck的每个值调用函数stringLength

i

应使用限定符 int i=0,count=0; while (i<stringLength(a)) ^^^^^^^^^^^^ 声明函数参数,因为传递的字符串不会在函数中更改。

实际上,功能const是多余的。无需编写函数stringLength就可以更简单地编写函数stringCheck

您在这里。

stringLength