显示字符串中字符数的程序

问题描述:

这是查找字符串中字符数的程序。但它计算错误的字符数。它是否也在计算白色空间?即使这是真的,总数如何能达到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; 
} 

enter image description here

+0

Aaaaagh!切勿使用'gets()'!它的设计无法安全使用。如果您的教科书使用'gets()'建议,请将其刻录。如果你的老师/教授建议使用'gets()',则放弃课程。认真;这种事情是一个更坏的废话来... –

+0

@KarlKnechtel,请解释为什么它不好使用gets()。在C中使用它们不好,还是在其他语言中使用它们也不好? 。我想读取包括空格在内的多个字符,直到按下“返回”按钮 –

+0

要使用** it **; 'gets()'是一个函数。这很糟糕,因为就像我说的那样,它的设计不可能安全使用。它在文档中说明了这一点(参见'bug'部分),并解释了更多原因。 (如果你不明白解释,你需要学习更多) –

有错的for循环计数字符两个重要的事情:

  1. 它从0到100,当它应该去0到99.如果你分配一个100个元素的数组,那么最高元素的索引是99,总共有100个元素。传统上,循环的退出条件是i < 100,而不是i <= 100

  2. 找到'\ 0'后继续前进。 '\ 0'字符标记字符串的结尾,并且不应该在其后面计算任何字符。 '\ 0'后的一些字符本身可能是'\ 0',所以你不会计数它们;但那里也可能有其他类型的垃圾,而这些垃圾会让你的计数变得糟糕。找到'\ 0'字符后,您必须弄清楚如何将for循环更改为退出,并且不会计算该点之后的任何其他值。

+0

对于(i = 0; i

+0

'break'是一个很好的选择,是的。 “

+0

如何跳过空格字符? –

是的,空格是一个字符。也是数组中每个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++; 
} 

}