没有输出(期望布尔输出)
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()
功能的下一个改进是,i
和count
似乎是同时更新的。当您可以简单地 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 长度超过 127
或 255
个字符的字符串长度不正确,具体取决于类型 char
表现为 signed char
或 unsigned 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;
}
所以我尝试不使用 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()
功能的下一个改进是,i
和count
似乎是同时更新的。当您可以简单地 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 长度超过 127
或 255
个字符的字符串长度不正确,具体取决于类型 char
表现为 signed char
或 unsigned 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;
}