代码:
#include <stdio.h>
#include <ctype.h>
unsigned int countCharacter(char* string, size_t strlength, char character);
int main()
{
char userInput[10000];
printf("Enter string: ");
fgets(userInput, sizeof(userInput), stdin);
printf("\nNumber of b's in string: %u", countCharacter(userInput,sizeof(userInput) / sizeof(char), 'b'));
return 0;
}
unsigned int countCharacter(char* string, size_t strlength, char character)
{
unsigned int charNumber;
for(int i = 0; i <= strlength; i++)
{
if(string[i] == character)
{
charNumber++;
}
}
return charNumber;
}
程序执行时输入的字符串:iiiiiibbbbbibbiibiibb
预期输出:10
实际输出:13
有时,我会输入相同的字符串,它将以14而不是13来表示。
如何解决此问题?
答案 0 :(得分:2)
您的代码中存在多个问题。
在函数.....1001.
.....01100
.0.10...00
.1.01...11
.
.
.
中,您将输入字符串的长度传递为:
$this->validate($request, [
'comment' => 'required|min:3|max:1000',
]);
始终为countCharacter()
,因为sizeof(userInput) / sizeof(char);
是10000
userInput
的数组。将其更改为:
10000
在函数char
中,您使用变量strlen(userInput)
作为计数器而不进行初始化:
countCharacter()
使用charNumber
初始化它。
在函数unsigned int charNumber;
中,您正在迭代0
循环一次:
countCharacter()
将其更改为:
for
解决这些问题,您将获得所需的输出。
答案 1 :(得分:1)
sizeof
数组与字符串的长度不同。 strlen
函数返回终止空字符之前的字符数。
正确的是: -
countCharacter(userInput, strlen(userInput), 'b');
此前与您输入的字符串无关 - 它始终通过10000
,因为数组中包含10000
char
元素。
在函数countCharacter
中,您没有使用值unsigned int
初始化charNumber
0
。使用不确定的值,您有未定义的行为。
unsigned int charNumber = 0;
此处不需要混合signed
和unsigned
- 您可以循环
for(size_t i = 0; i < strlength; i++)
另请注意,您需要在一个额外的时间内循环,这是不需要的。您可以在此处使用<
。
检查fgets()
的返回值。
if(!fgets(userInput, sizeof(userInput), stdin)){
fprintf(stderr,"Error in input\n");
}
另外printf("\nNumber of b's in string: %u\n"..)
打印输出,并附加\n
。遵循这一点很好。
使用启用的所有警告编译您的程序。 gcc -Wall -Werror progname.c
答案 2 :(得分:0)
现在你拥有它的方式将会持续超过用户实际输入的内容。更改你的for循环测试,使它也在字符串[i]为0时停止。
答案 3 :(得分:0)
您的代码中存在一些逻辑错误!
1)用'_strlength'或任何变量替换'strlength'变量,因为'strlength'是一个buildin函数,因此不允许编译。
2)函数中未初始化的变量'charNumber'。所以你必须用零'0'值初始化它。
3)在_strlength之前执行循环的迭代。你将错误的条件放在for循环中,小于等于'&lt; ='。因为我们将字符数组启动为零'0'直到小于字符串的大小。
试试这个代码!我也附加了代码的输出。
#include <stdio.h>
#include <ctype.h>
unsigned int countCharacter(char* string, size_t _strlength, char character);
int main()
{
char userInput[10000];
printf("Enter string: ");
fgets(userInput, sizeof(userInput), stdin);
printf("\nNumber of b's in string: %u", countCharacter(userInput, sizeof(userInput) / sizeof(char), 'b'));
return 0;
}
unsigned int countCharacter(char* string, size_t _strlength, char character)
{
unsigned int charNumber=0;
for (int i = 0; i < _strlength; i++)
{
if (string[i] == character)
{
charNumber++;
}
}
return charNumber;
}