大写字母计数,小写字母计数,空白计数和低到高转换 - C

时间:2012-01-26 11:21:26

标签: c counter uppercase lowercase

我对语言(C)有些陌生,但我想做的是非常简单的imo。我确定我只是忽略了某些东西或遇到了一些逻辑错误。

正如标题所示,我希望程序要做的就是计算小写字母,大写字母和空格的数量。作为附加功能,它还将输入的小写字母转换为大写。

#include <stdio.h>

int main(void){

    int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0;

    printf("Please enter a phrase:\n\n");

    while((iochar=getchar())!=EOF) {
        if ((iochar=' ')||(iochar='\t')||(iochar='\n')){
            numwhites++;
            putchar(iochar);
        }
        else if((iochar>='0')&&(iochar<='9')) {
         numdigits++;
         putchar(iochar);
        }
        else if(('a'<=iochar)&&(iochar<='z')) {
            numlower++;
            putchar(iochar-32);
        } 
        else if(('A'<=iochar)&&(iochar<='Z')) {
            numupper++;
            putchar(iochar);
        }
        else 
           putchar(iochar); 
    }

    printf("%d white characters, %d digits, ",numwhites,numdigits);
    printf("%d lowercase have been converted to ",numlower);
    printf("uppercase and %d uppercase.\n",numupper);

    printf("\n\n");

    return 0;
}

3 个答案:

答案 0 :(得分:3)

if ((iochar=' ')||(iochar='\t')||(iochar='\n'))

在这里你分配给iochar并且永远是真的。这应该是一个比较:

if ((iochar==' ')||(iochar=='\t')||(iochar=='\n'))

答案 1 :(得分:0)

请查看isupper(int c)中定义的islower(int c)isspace(int c)ctype.h。您也许也可以从同一文件中定义的toupper(int c)tolower(int c)中受益。

另请注意Sani的答案,C中的比较为==,而作业为=。此外, 可以在if语句中进行分配,这可能会产生甚至常见的错误,例如您的错误。在我看来,一个好的约定是写这样的比较:

if ('\n' == iochar)

这样,如果我打错字并写下来:

if ('\n' = iochar)

我会在编译期间遇到语法错误,而不是在运行时出现奇怪的行为。

答案 2 :(得分:0)

我认为Sani Huttenen很好地解决了你的问题。我也建议你打电话

putchar(iochar)
只有一次在你的bucle结束时...它会更清楚。