如何将段落转换为句子?我有一个函数签名如下:
char **makeSentences(char *paragraph);
其中:
paragraph
是一个包含多个句子的字符串。段落确保每个句子以句点(。)结尾,整个段落以空终止符结束。我对如何为动态句子分配内存感到困惑。
答案 0 :(得分:1)
在makeSentences
中,您需要检查paragraph
以确定每个句子包含的字符数,包括\0
的句点和字符。
您可以像这样分配内存:
int i;
char** sentences = (char**)malloc( sizeof(char*) * number_of_sentences );
for (i = 0; i < number_of_sentences; i++) {
sentences[i] = (char*)malloc( sizeof(char) * length_of_sentences[i] );
}
其中length_of_sentences
是一个包含您发现的句子长度的数组。
答案 1 :(得分:0)
编写一个帮助方法,提前计算段落数,然后根据这个数字malloc一个char *指针数组。它会是这样的,虽然下面的代码是未经测试的,所以它可能不会直接起作用:
int getSentenceCount( char* paragraph) {
int sentenceCount = 0, i = 0;
for(i=0; i < sizeof(paragraph); i++){
if(paragraph[i] == '.') sentenceCount++;
}
return sentenceCount;
}
一旦你有一个句子计数,其余的应该很容易使用字符串实用程序函数(见string.h)
答案 2 :(得分:0)
这样调用者可以确定它何时到达数组的末尾,只需将数组放大一个条目,并使用NULL作为最后一个/额外的条目。
困难的部分肯定是确定句子的开始/结束位置。这是一些例句(每行一个句子):
Hello world!
Are you hungry?
She said "Hello. I'm Sara!" and smiled.
I installed version 1.3.
They laughed at the F.B.I. and ran.
The function returned the sequence 1, 3, 5, ..., 33.
7 is a lucky number (and this sentence doesn't start with a capital letter).
将所有这些句子放在一个段落中,看看你的“句末”检测是否正常。