繁体   English   中英

如何计算字符串中特殊字符的数量?

[英]How do I count the number of special characters in a string?

我正在编写一个程序,该程序将计算行,单词,字符,数字,字母和特殊字符的数量。 到目前为止,该程序几乎已经完成,但是特殊字符给我带来了麻烦。 我在if语句中使用while循环来计算这些字符,在else语句中使用特殊字符。 有人可以指出正确的方向吗?

这是我正在使用的字符串:

欢迎来到CIS158。 C和Tux正在努力工作,是吗? 希望您玩得开心,学习新技能。 既然如此,是时候说“祝你学期快乐!”

尝试了else语句,该语句将增加特殊字符。


        // Declare a pointer to fopen function to access welcome file
        FILE *fp = fopen("/classes/cis158/cntwlc/welcome", "r");
        char fileName[100];
        char ch;

        int lineCount, charCount, wordCount, abcCount, numCount, speCount;


        lineCount = 0;
        wordCount = 0;
        charCount = 0;
        abcCount  = 0;
        numCount  = 0;
        speCount  = 0;


        gets(fileName);
        //fp = fopen(fileName, "r");


                while((ch = getc(fp)) != EOF) {
                        if(ch == '\n')
                                lineCount++;

                        if(ch == ' ' || ch == '\n')
                                wordCount++;

                        if(ch != ' ' || ch != '\n')
                                charCount++;

                        if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
                                abcCount++;

                        if(ch >= '0' && ch <= '9')
                                ++numCount;
                        else
                                speCount++;


                ch++;
                }
                /*if(charCount > 0) {
                        ++lineCount;
                        ++wordCount;
                }*/


        printf("---  Text Statistics:  ---\n\n");
        printf("Lines                %d\n", lineCount);
        printf("Words                %d\n", wordCount);
        printf("Characters           %d\n", charCount);
        printf("Alphabetic           %d\n", abcCount);
        printf("Digits               %d\n", numCount);
        printf("Special              %d\n", speCount);

getchar();
return 0;
        //printf("%20s", &userInput);

}// main

这些是预期的结果:

---文字统计:---第5行单词37个字符188个字母139位3个特殊9

这是我运行程序时得到的:

-文字统计:-

行5字37个字符188个字母139位3个特殊185个

您的else仅匹配数字的if。 既然发生了这种情况,那么不是数字的任何字符都将计入您的特殊字符数。

我建议以下内容:

// Declare a pointer to fopen function to access welcome file
        FILE *fp = fopen("/classes/cis158/cntwlc/welcome", "r");
        char fileName[100];
        char ch;

        int lineCount, charCount, wordCount, abcCount, numCount, speCount;


        lineCount = 0;
        wordCount = 0;
        charCount = 0;
        abcCount  = 0;
        numCount  = 0;
        speCount  = 0;


        gets(fileName);
        //fp = fopen(fileName, "r");


                while((ch = getc(fp)) != EOF) {
                        if(ch == '\n')
                                lineCount++;

                        if(ch == ' ' || ch == '\n')
                                wordCount++;

                        if(ch != ' ' || ch != '\n')
                                charCount++;

                        if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
                                abcCount++;

                        else if(ch >= '0' && ch <= '9')
                                ++numCount;
                        else if(ch != ' ' && ch != '\n')
                                speCount++;


                ch++;
                }
                /*if(charCount > 0) {
                        ++lineCount;
                        ++wordCount;
                }*/


        printf("---  Text Statistics:  ---\n\n");
        printf("Lines                %d\n", lineCount);
        printf("Words                %d\n", wordCount);
        printf("Characters           %d\n", charCount);
        printf("Alphabetic           %d\n", abcCount);
        printf("Digits               %d\n", numCount);
        printf("Special              %d\n", speCount);

getchar();
return 0;
        //printf("%20s", &userInput);

}// main

请注意,您的字数统计有误,但我会留给您找出答案。

暂无
暂无

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

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