如何计算除双引号或单引号之外的字符?

时间:2015-08-11 08:09:37

标签: c

我是通过一本书编程和学习C的新手。

本书的作者通过给出以下示例来解释逻辑运算符(AND,NOT和OR),该示例计算除双引号或单引号和句点字符之外的字符数。

我无法理解除了引号和句号之外的字符数。我理解,使用AND运算符时,两个条件都应该为真。

#include <stdio.h>
#define PERIOD '.'
int main(void)
{
    char ch;
    int charcount = 0;

    while ((ch = getchar()) != PERIOD)
    {
        if (ch != '"' && ch != '\'')
            charcount++;
    }
    printf("There are %d non-quote characters.\n", charcount);
    return 0;
}

4 个答案:

答案 0 :(得分:3)

我将尝试向您解释代码的主要部分:

    while ((ch = getchar()) != PERIOD)
    {

在这里,它会检查文本中包含的每个字符,只要字符与PERIOD不同,这是一个点,所以它只是检查句子中的所有字符。

if (ch != '"' && ch != '\'')
charcount++;
}

如果条件为真,则在charcount加1。要让if返回true,ch != '"'ch != '\''都必须为真! &&运算符是logical AND,并且对于AND返回true(1),两个条件必须等于1.因此,如果字符等于“或”,则AND将返回0 ,所以我们不会在charcount添加1。

答案 1 :(得分:2)

此条件if (ch != '"' && ch != '\'')正在检查输入的字符是"还是'否则会增加字符数,否则不会。如果用户输入d#,则会满足条件,因为#的ASCII值不等于"',并且计数将获得递增。

答案 2 :(得分:2)

好吧,对于由getchar()返回并存储在ch中的每个字符(来自输入流,如键盘或文件),它将测试它是否不是双引号({{1} })如果它不是引用(ch != '"'

ch != '\''是转义字符,表示\是字符'\''

如果它们都不是,那么它会递增计数器(')。

只要charcount++;没有返回句点(getchar()),就会继续这样做(如果确实如此,(ch = getchar()) != PERIOD将不会被计算,因为代码将会执行意志循环立即)。

答案 3 :(得分:0)

您可以跳过使用继续:

#include<stdio.h>
#define PERIOD '.'

int main(void)
{
    char ch;
    int charcount = 0;

    while ((ch = getchar()) != PERIOD)
    {
        if (ch != '"' && ch != '\''){
            continue;
        }
            charcount++;
    }
    printf("There are %d non-quote characters.\n", charcount);
    return 0;
}

输出:

./program 
Michi"""LoL'''Another'"LoL.
There are 8 non-quote characters.