c语言 删除 单词,删除十个单词

#include

#include

#include

#include

#include

#include

#include

using namespace std;

char XX[50][80],YY[50][80];

int maxline,i;

int isDelword(char *word);

void processString (char * str);

int isToken(char c);

void processWord(char *bp,char *fp);

int readdat(char *s,char *t);

void main()

{

int j;

FILE *fp;

readdat("in.txt","r");

fp=fopen("out.txt","w");

if(!fp)

{printf("can't open the outfile");

exit(1);

}

for(i=0;i

processString(XX[i]);

for(j=0;j

printf("%s",XX[j]);

for(j=0;j

fprintf(fp,"%s",XX[j]);

fclose(fp);

}

void processString (char * str){

char *fp, *bp;

fp = bp =str;

/**保证一开始bp,fp两个指针指向一个非分割字符(即一个字母字符)。*************/

while(*fp!=NULL && isToken(*fp)) fp++;

bp=fp;

/**这个while循环遍历整个字符串,用分割字符分割整个字符串,把它变成一个个单词。

然后有processWord(bp,fp)处理单词。

*************/

while(*fp!=NULL){

if (!isToken(*fp))

{fp++;continue;}

if(bp < fp) processWord(bp,fp);

/* 处理完从bp开始到fp结束的这个单词之后,再用这个while循环,保证bp和fp都指向下一个word的开始处,

即指向下一个字母字符位置。

*/

while(*fp!=NULL && isToken(*fp)) fp++;

bp = fp;

if (*fp==NULL) break;

else fp++;

}

/* 下面这个if语句不要省,不然最后一个单词可能不能输出:如"you are a student",注意这个字符串最后没有"."结尾

这样的话最后一个student没法输出。

*/

if(bp < fp) processWord(bp,fp);

}

/**取出指针从bp到fp的所有字符,存入一个临时数组空间,

判断是不是delword,是的化,不处理,否则存入XX数组中

*************/

void processWord(char *bp,char *fp){

char *word;

int k=0;

word = (char *)malloc(fp-bp+1);

while (bp

{word[k++] = *bp;

bp++;

}

word[k]=0;

if (!isDelword(word)) strcat(YY[i],word);

free(word);

}

int isDelword(char *word){

/**该函数判断提取的单词是不是要删除的单词*************/

char *lword;

int i,flag=0;

lword = (char *)malloc(strlen(word)+1);

for (i=0;i<=strlen(word);i++)

lword[i] = tolower(word[i]);

if (strcmp(lword,"you")==0) flag=1;

if (strcmp(lword,"for")==0) flag=1;

if (strcmp(lword,"your")==0) flag=1;

if (strcmp(lword,"on")==0) flag=1;

if (strcmp(lword,"no")==0) flag=1;

if (strcmp(lword,"if")==0) flag=1;

if (strcmp(lword,"the")==0) flag=1;

if (strcmp(lword,"in")==0) flag=1;

if (strcmp(lword,"to")==0) flag=1;

if (strcmp(lword,"all")==0) flag=1;

free (lword);

return flag;

}

int isToken(char c){

/**该函数判断该字符是不是分割字符,即所有的非字母字符*************/

int flag = 0;

if (!isalpha(c)) flag = 1;

return flag;

}

int readdat(char *s,char *t)

{

char *p;

int j=0;

FILE *fp;

if((fp=fopen(s,t))==NULL)

{printf("can't open the file");

return 1;

}

while(fgets(XX[j],80,fp)!=NULL)

{

p=strchr(XX[j],'\n');

if(p)*p=0;

j++;

}

maxline=j;

fclose(fp);

return 0;

}

[[it] 本帖最后由 yqiong 于 2008-4-6 22:51 编辑 [/it]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值