计算空白,制表符和换行符的程序

时间:2012-06-21 14:19:00

标签: c tabs newline

我正在阅读 C编程语言。这是一个问题,即编写程序来计算空白,制表符和换行符。现在我可以使用 \ n 作为换行符, \ t 作为标签,但我第一次听到空白!空白到底意味着什么?对于换行符和选项卡,我编译了以下程序:

#include <stdio.h>

/*  program to count blanks, tabs, and newlines */
main (){
    long blanks, tabs, newlines, input;

    blanks = 0;
    tabs = 0;
    newlines = 0;
    input = 0;
    while ((input = getchar()) != EOF)
        if (input == '\n')
            ++newlines;
        else if (input == '\t')
            ++tabs;

    printf("Total newlines: %ld\nTotal Tabs: %ld", newlines, tabs);
}

8 个答案:

答案 0 :(得分:4)

空白=空格(' '

虽然您的代码正常运行但我强烈建议为while循环体添加{ }

答案 1 :(得分:0)

空白只是一个空间,大部分时间。您应该查看isblank()函数以帮助进行分类。

答案 2 :(得分:0)

我确定他们的意思是空格字符''。

请参阅此处获取ASCII码:

http://www.asciitable.com/

也是0x13回车,可不是要找那个?新行实际上并不那么简单,具体取决于文件的格式:

http://en.wikipedia.org/wiki/Newline

和其他人一样,你可能想考虑使用

中的功能

http://www.cplusplus.com/reference/clibrary/cctype/

答案 3 :(得分:0)

#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("Type and Press Enter. CTRL-Z for EOF:\n");
int c;
int b = 0;
int t = 0;
int nl = 0;

while((c = getchar())!=EOF){

    putchar(c);
    if(c=='\t')
        ++t;

    if(c==' ')
        ++b;
    if(c=='\n')
        ++nl

}

printf("\n%d and %d\n",b,t,nl);


return 0;

}

如果我们需要知道所有3个值,你已经添加了一个不需要的其他内容。

答案 4 :(得分:0)

请找到下面的代码,这将解决您的完整问题。

#include <stdio.h>

/* Count blank, tabs, and new lines */

main ()
{
    long c, b, t, l;    /* c for characters, b for blanks, t for tabs, l for lines */

    b = 0;
    t = 0;
    l = 0;

    while ( ( c = getchar() ) != EOF )
    {

        if ( c == '\n')
        ++l;
        if ( c == '\t')
        ++t;
        if ( c == ' ')
        ++b;
    }

    printf ("\n No of blanks : %d \n", b);
    printf ("\n No of tabs : %d \n", t);
    printf ("\n No lines in input: %d \n", l);
}

答案 5 :(得分:0)

我认为空白是新行,然后是新行

        #include<stdio.h>
        int main()
        {
            int c,nl,nb,nt;
            nl = 0;
            nb = 0;
            nt = 0;
            int flag =1;

            while((c = getchar()) != EOF){
                if(c == '\n')
                {
                    ++nl;
                    if(flag)
                    ++nb;
                    flag = 1;  
                }
                else
                flag = 0;     

                if(c == '\t')
                ++nt;     
            }
            printf("lines : %d, tabs: %d, blanks: %d", nl, nt, nb);     

            return 0;
        }

答案 6 :(得分:0)

此答案-得益于其他用户的贡献-仅使用练习1-8中讲授的材料。按Ctrl + z(我使用Windows DOS)时,程序跳至printf语句,打印答案,然后退出至DOS提示符。

UPDATE activity a 
SET a.amount = v.amount, 
    a.count = v.count 
FROM ( SELECT id,
                Sum(actual) amount,
                Count(id)  count
         FROM   amount_first
         WHERE  status = 1
                AND updated >= 1538323200
                AND updated <= 1541001599
         GROUP  BY id
         UNION
         SELECT id,
                Sum(0) amount,
                0      count
         FROM   amount_second
         WHERE  type = 3
                AND created >= 1538323200
                AND created <= 1541001599
         GROUP  BY id ) v
WHERE v.id = a.playerid

当您按Enter键5次,按空格键2次,按Tab键4次,然后按Ctrl + z时,您将得到

总空白:2 标签总数:4 换行符总数:5

然后是DOS提示符。

答案 7 :(得分:0)

我认为的解决方案是:

for