0

如何将段落转换为句子?我有一个函数签名如下:

char **makeSentences(char *paragraph);

其中:

  • paragraph是一个包含多个句子的字符串。段落确保每个句子都以句点 (.) 结尾,并且整个段落以空终止符结尾。
  • 返回一个动态分配的句子数组。

我对如何为动态句子数组分配内存有点困惑。

4

3 回答 3

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] );
}

wherelength_of_sentences是一个包含您发现的句子长度的数组。

于 2011-11-20T08:20:16.577 回答
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).

将所有这些句子放在一个段落中,看看您的“句末”检测是否正常工作。

于 2011-11-20T10:23:02.057 回答
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)

于 2011-11-20T08:19:47.340 回答