显示字符串中字符数的程序
这是查找字符串中字符数的程序。但它计算错误的字符数。它是否也在计算白色空间?即使这是真的,总数如何能达到89? (见下文输出)显示字符串中字符数的程序
#include <stdio.h>
#include <conio.h>
void occurrence(char str[100], char ch)
{
int count=0,max =0,i;
for(i=0;i<=100;i++)
{
if(str[i]!='\0')
{
max = max + 1;
if(str[i]==ch)
{
count = count + 1;
}
}
}
printf("\nTotal Number of characters : %d\n",max);
printf("\nNumber of Occurrences of %c : %d\n",ch,count);
}
int main(void)
{
void occurrence(char [], char);
int chk;
char str[100], ch, buffer;
clrscr();
printf("Enter a string : \n");
gets(str);
printf("Do you want to find the number of occurences \nof a particular character (Y = 1/N = 0) ? ");
scanf("%d", &chk);
do
{
if (chk==1)
{
buffer = getchar(); //dummy varaiable to catch input \n
printf("Enter a Character : ");
ch = getchar();
occurrence(str,ch);
printf("\n\nDo you want to check the number of occurences \nof another character (Y = 1/N = 0) ? ");
scanf("%d", &chk);
}
else
{
exit();
}
}
while(chk);
return 0;
}
有错的for
循环计数字符两个重要的事情:
它从0到100,当它应该去0到99.如果你分配一个100个元素的数组,那么最高元素的索引是99,总共有100个元素。传统上,循环的退出条件是
i < 100
,而不是i <= 100
。找到'\ 0'后继续前进。 '\ 0'字符标记字符串的结尾,并且不应该在其后面计算任何字符。 '\ 0'后的一些字符本身可能是'\ 0',所以你不会计数它们;但那里也可能有其他类型的垃圾,而这些垃圾会让你的计数变得糟糕。找到'\ 0'字符后,您必须弄清楚如何将
for
循环更改为退出,并且不会计算该点之后的任何其他值。
对于(i = 0; i
'break'是一个很好的选择,是的。 “
如何跳过空格字符? –
是的,空格是一个字符。也是数组中每个100个元素的字符。你计算的是一切,但是空值,sp我猜你有11个空值。另外,你的for循环是关闭的。
这会给你正确的输出。
void occurrence(char str[100], char ch)
int count = 0,max = 0,i = 0;
while(str[i]!='\0')
{
max = max + 1;
if(str[i] == ch)
{
count = count + 1;
}
i++;
}
}
Aaaaagh!切勿使用'gets()'!它的设计无法安全使用。如果您的教科书使用'gets()'建议,请将其刻录。如果你的老师/教授建议使用'gets()',则放弃课程。认真;这种事情是一个更坏的废话来... –
@KarlKnechtel,请解释为什么它不好使用gets()。在C中使用它们不好,还是在其他语言中使用它们也不好? 。我想读取包括空格在内的多个字符,直到按下“返回”按钮 –
要使用** it **; 'gets()'是一个函数。这很糟糕,因为就像我说的那样,它的设计不可能安全使用。它在文档中说明了这一点(参见'bug'部分),并解释了更多原因。 (如果你不明白解释,你需要学习更多) –