C,阅读和识别句子

时间:2014-03-12 14:36:56

标签: c io

我要做的是采取输入文件,如..

Hello. This is my test file. How many sentences are in this?
Hopefully the program will work! Good luck.

并且需要它打印出每个单独的句子并将它们编号为......

1. Hello.
2. This is my test file.
3. How many sentences are in this?
4. Hopefully the program will work!
5. Good luck.

到目前为止,这是我的代码,我在C中尝试这个,但我也简单地想过,也许我应该在bash中这样做?我不确定..

这是我到目前为止所做的,但是没有用。

#include <stdio.h>
#include <stdlib.h>

main()
{
int storage[50];
int i;
char c;
for(;;){
    while (c!= '.' && c!= '!' && c!= '?'){
    c=getchar();
    c=storage[i];
    i++;
    if (c == '.' || c == '!' || c == '?'){
        for(i=i; i!=0; i--){
            printf("%s", storage[i]);
        }
    }
    }

}
}

2 个答案:

答案 0 :(得分:1)

int i;此处变量i未初始化,这意味着它可以具有超过50的任何值,而您尝试将c存储到c中,这是不期望的。

' '没有包含正确值的任何内容,您可以在while循环中检查其内容,但无法循环播放。

我建议您使用fopen打开文件。使用fgets逐行开始读入缓冲区,然后使用strtok()对其进行操作,将分隔符作为空格{{1}}在每个空格后断开字符串并继续。

答案 1 :(得分:-1)

这大概就是你想要的。请注意,仍有改进的余地。例如,在&#39;&#39;,&#39;之后,它不会跳过空格。&#39;或者&#39;!&#39;,它只处理一行,短语中的最大字母数为50,如果你输入一个多于50个字母的短语,storage缓冲区将会静默溢出。 / p>

void main()
{
  int storage[50];
  int i = 0 ;
  int linecount = 1 ;
  char c;

  for (;;)
  {
    c=getchar();

    if (c == '\n')
      break ;

    storage[i] = c;
    i++;

    if (c == '.' || c == '!' || c == '?')
    {
      int j ;

      printf("%d. ", linecount++);

      for (j = 0; j < i; j++)
      {
        printf("%c", storage[j]);
      }

      i = 0 ;
      printf("\n");
    }
  }
}