C - 计算句子

时间:2015-05-17 15:12:14

标签: c

我写了这段代码,但我无法处理“。?!”和其他这些人物的组合?有人能帮助我吗?我需要计算一行中的句子。

child1

3 个答案:

答案 0 :(得分:1)

避免问题的一种方法是使用strtok

const char* delim = "?!.";
char *token = strtok(line, delim);

while(token != NULL)
{
    say++;
    token = strtok(NULL, delim);
}

答案 1 :(得分:1)

读完该行后,需要丢弃多个连续的标点符号序列。您可以使用简单的状态标志执行此操作:

迭代(循环)输入。如果你有一个标点字符,那么设置状态(记得初始化它以在开始时取消设置)。如果你有一个普通(非标点符号)字符并且设置了状态标志,那么增加一个句子计数器并清除标志。否则不要做任何特别的事。

我将把实施作为练习。

答案 2 :(得分:1)

尝试添加一些例外,您可以检查.?!标点之前的字符是否与其中任何一个相同。如果是,请不要增加。

if(line[i]=='.' || line[i]=='?' || line[i]=='!') {
    if (i-1 > -1 && (line[i-1]!='.' && line[i-1]!='?' && line[i-1]!='!'))
        say++;
}

i-1 > -1解决了一个特例,其中.?!中的任何一个都是该行的第一个字符,并且包含在句子计数中,而不应该是# 39; t be。

尝试过,".?!"组合的结果为0

<强>结果:

.?!
0

?.!
0

!.?
0

!?.
0

!.?
0

.!?
0

ho hey! hello?
2

. Really?
1

Hello world!
1