繁体   English   中英

统计C程序中字母、数字和特殊字符的个数

[英]Count the number of letters, digits and special characters in C program

所以这是我的代码,我正在为ispunct()苦苦挣扎; 它从 8 开始计数,在isalpha()中它开始从 1 开始计数,所以我将它打印为 noAlpha-1,但是在ispunct() noSpecial-8变得准确是很尴尬的。 我没有任何数字问题。 这可能是什么问题?

#include<stdio.h>
#include<ctype.h>

int main(){
    
    char string[100];
    int i, noAlpha, noDigit, noSpecial;
        
       printf("Input the string : ");
       gets(string);    

 
        noAlpha=0;
        noDigit=0;
        noSpecial=0;
        
        for(i=0;i<100;i++) {
     
        if(isalpha(string[i]))
        noAlpha++;
    
        
        if(isdigit(string[i]))
        noDigit++;
        
        if(ispunct(string[i]))
        noSpecial++;
    }
        
        printf("Number of Alphabets in the string is %d\n", noAlpha-1);
        printf("Number of Digits in the string is %d\n", noDigit);
        printf("Number of Special characters in the string is %d\n", noSpecial);
}

function 获取不安全,不受 C 标准支持。

要么使用 fgets 之类的

fgets( string, sizeof( string ), stdin );

或扫描喜欢

scanf( "%99[^\n]", string );

输入的字符串可以小于数组字符串的大小。 所以这个循环

for(i=0;i<100;i++) 

调用未定义的行为。

相反,你应该使用

for(i=0; string[i] != '\0'; i++) 

最好像 if-else 语句一样重写 if 语句

    unsigned char c = string[i];

    if( isalpha( c ) )
    {
        noAlpha++;
    }
    else if( isdigit( c ) )
    {
        noDigit++;
    }
    else if( ispunct( c ) )
    {
        noSpecial++;
    }

所以 output 看起来像

    printf("Number of Alphabets in the string is %d\n", noAlpha);
    printf("Number of Digits in the string is %d\n", noDigit);
    printf("Number of Special characters in the string is %d\n", noSpecial);
#include<stdio.h>
#include<ctype.h>

int main(){
    
    char string[100];
    int i, noAlpha, noDigit, noSpecial;
        
       printf("Input the string : ");
       scanf( "%99[^\n]", string );    

 
        noAlpha=0;
        noDigit=0;
        noSpecial=0;
        
        for(i=0; string[i] != '\0'; i++) {
     
        unsigned char c = string[i];

        if( isalpha( c ) )
        {
        noAlpha++;
        }
        else if( isdigit( c ) )
        {
        noDigit++;
        }
        else if( ispunct( c ) )
        {
        noSpecial++;
        }
        }
        
        printf("Number of Alphabets in the string is %d\n", noAlpha-1);
        printf("Number of Digits in the string is %d\n", noDigit);
        printf("Number of Special characters in the string is %d\n",noSpecial);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM