统计单词个数,怎么去掉单词后面的标点符号

统计单词个数,如何去掉单词后面的标点符号?


统计一个txt文本中英语单词的个数,用的fscanf函数,总是把单词后面的逗号统计进去了,请教各位高手如何去掉标点符号呢?

代码如下:

void main()
{
char s[1000][5]={0};
int i=0;

FILE *fp=fopen("D:\\test.txt","r");

for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s",s[i]);
printf("第%d个单词为:%s\n",i+1,s[i]);
}
printf("共%d个单词\n",i);
   
   fclose(fp);
}

------解决思路----------------------
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
int main() {
    static char s[1000][30];
    int i;
    FILE *fp;

    setlocale(LC_ALL,"chs");
    fp==fopen("D:\\test.txt","r");
    if (NULL==fp) return 1;

    for (i=0;i<1000 && !feof(fp);i++) {
        fscanf(fp,"%29s",s[i]);
        L=strlen(s[i]);
        if (!isalpha(s[i][L-1])) s[i][L-1]=0;
        printf("第%d个单词为:%s\n",i+1,s[i]);
    }
    printf("共%d个单词\n",i);
    fclose(fp);
    return 0;
}

------解决思路----------------------
动态s的版本,仅供参考:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
int main() {
    char *s,*s1;
    int N=1000;
    int i;
    FILE *fp;

    setlocale(LC_ALL,"chs");
    fp==fopen("D:\\test.txt","r");
    if (NULL==fp) return 1;

    s=(char *)malloc(1000*32);
    if (NULL==s) return 2;
    for (i=0;!feof(fp);i++) {
        fscanf(fp,"%31s",s+i*32);
        L=strlen(s+i*32);
        if (!isalpha(s[i*32+L-1])) s[i*32+L-1]=0;
        printf("第%d个单词为:%s\n",i+1,s+i*32);
        if (i%1000==999) {
            s1=realloc(s,(i+1+1000)*32);
            if (NULL==s1) return 3;
            s=s1;
        }
    }
    printf("共%d个单词\n",i);
    fclose(fp);
    free(s);
    return 0;
}

------解决思路----------------------
if (i%1000==999) {//当前单词数累加到除1000的余数是999时,重新分配s的大小,增加1000个
    s1=(char *)realloc(s,(i+1+1000)*32);
    if (NULL==s1) return 3;
    s=s1;
}

------解决思路----------------------
#pragma warning(disable:4018)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <malloc.h>
#include <locale.h>
int main()
{
    char *s,*s1,*M,*N;
    int i,k,n,L,maxlen,minlen;
    FILE *fp;

    setlocale(LC_ALL,"chs");
    fp=fopen("D:\\Exce1.txt","r");
    if (fp==NULL) return 1;

    s=(char *)malloc(1000*32);
    if (s==NULL) return 2;

    for (i=0;!feof(fp);i++) {
        fscanf(fp,"%31s",s+i*32);
        L=strlen(s+i*32);
        if (!isalpha(s[i*32+L-1])) s[i*32+L-1]=0;
        printf("第%d个单词为:%s\n",i+1,s+i*32);
        if (i%1000==999) {
            s1=(char *)realloc(s,(i+1+1000)*32);
            if (s1==NULL) return 3;
            s=s1;
        }
    }
    printf("共%d个单词\n",i);

    maxlen=strlen(s);
    M=s;
    for (k=32;k<i*32;k+=32) {
        if (maxlen<strlen(s+k)) {
            maxlen=strlen(s+k);
            M=s+k;
        }
    }

    minlen=strlen(s);
    N=s;
    for (n=32;n<i*32;n+=32) {
        if (minlen>strlen(s+n)) {
            minlen=strlen(s+n);
            N=s+n;
        }
    }

    printf("最长的单词是:%s\n, 最短的单词是:%s\n",M,N);

    fclose(fp);
    free(s);
    return 0;
}