问题描述
因此,我尝试不使用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()
函数的下一个改进是i
和count
似乎是同时更新的。我想不出为什么只需简单地返回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
将返回不正确的字符串长度,这些字符串的长度超过127
或255
个字符,具体取决于类型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