一个中文文件,如何分别提取出文件中的所有句子?要求用C++实现!多谢!急,在线等待!

中文txt文档,跟我们平时看的文档一样,每句话以句号、问号、感叹号之类的结尾。... 中文txt文档,跟我们平时看的文档一样,每句话以句号、问号、感叹号之类的结尾。 展开
 我来答
百度网友a3722676e
2010-10-22 · TA获得超过1215个赞
知道小有建树答主
回答量:957
采纳率:0%
帮助的人:866万
展开全部

你的文件是什么样的啊!!每句话以什么结尾啊!!。还是.又或者是其他的呢?给个样本看看! 

vc6.0 编译

使用方法 例子:app c:\\1.txt 一定用双\\

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

#if 1

 if (argc != 2)

 {

  cout<<"Usag: <应用程序> <文件路径>"<<endl;

  return 1;

 }

#endif

 FILE *fp;

 

 if ((fp = fopen(argv[1], "r")) == NULL)

 {

  cout<<"打开文件"<<argv[1]<<"错误!"<<endl;

  return 1;

 }

 fseek(fp, 0, SEEK_END);

 long nFileSize = ftell(fp);

 fseek(fp, 0, SEEK_SET);

 char *ptoken1, *ptoken2, *ptoken3, *pstr;

 char *pszFileBuff;

 char szLineBuff[1024] = {0};

 pszFileBuff  = new char[nFileSize+1];

 fread(pszFileBuff, sizeof(char), nFileSize, fp);

 pszFileBuff[nFileSize] = '\0';

 cout<<pszFileBuff<<endl;

 fclose(fp);

 pstr = pszFileBuff;

 if ((ptoken1 = strstr(pstr, "?")) == NULL)

  ptoken1 = pszFileBuff + nFileSize;

 if ((ptoken2 = strstr(pstr, "!")) == NULL)

  ptoken2 = pszFileBuff + nFileSize;

 if ((ptoken3 = strstr(pstr, "。")) == NULL)

  ptoken3 = pszFileBuff + nFileSize;

 if (ptoken1 < ptoken2 && ptoken1 <ptoken3)

 {

  memcpy(szLineBuff, pstr, ptoken1 - pstr + 2);

  pstr = ptoken1+2;

 }

 else if (ptoken2 < ptoken1 && ptoken2 <ptoken3)

 {

  memcpy(szLineBuff, pstr, ptoken2 - pstr + 2);

  pstr = ptoken2+2;

 }

 else if (ptoken3 < ptoken1 && ptoken3 <ptoken2)

 {

  memcpy(szLineBuff, pstr, ptoken3 - pstr + 2);

  pstr = ptoken3+2;

 }

#if 1

 while(1)

 {

  cout<<szLineBuff<<endl;

  memset(szLineBuff, 0, 1024);

  if ((ptoken1 = strstr(pstr, "?")) == NULL)

   ptoken1 = pszFileBuff + nFileSize;

  if ((ptoken2 = strstr(pstr, "!")) == NULL)

   ptoken2 = pszFileBuff + nFileSize;

  if ((ptoken3 = strstr(pstr, "。")) == NULL)

   ptoken3 = pszFileBuff + nFileSize;

  

  if (ptoken1 < ptoken2 && ptoken1 <ptoken3)

  {

   memcpy(szLineBuff, pstr, ptoken1 - pstr + 2);

   pstr = ptoken1+2;

  }

  else if (ptoken2 < ptoken1 && ptoken2 <ptoken3)

  {

   memcpy(szLineBuff, pstr, ptoken2 - pstr + 2);

   pstr = ptoken2+2;

  }

  else if (ptoken3 < ptoken1 && ptoken3 <ptoken2)

  {

   memcpy(szLineBuff, pstr, ptoken3 - pstr + 2);

   pstr = ptoken3+2;

  }

  else

   break;

 }

#endif

 free(pszFileBuff);

 return 0;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式