我写了这段代码,但我无法处理“。?!”和其他这些人物的组合?有人能帮助我吗?我需要计算一行中的句子。
child1
答案 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