统计单词个数,怎么去掉单词后面的标点符号
统计单词个数,如何去掉单词后面的标点符号?
统计一个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);
}
------解决思路----------------------
------解决思路----------------------
动态s的版本,仅供参考:
------解决思路----------------------
if (i%1000==999) {//当前单词数累加到除1000的余数是999时,重新分配s的大小,增加1000个
s1=(char *)realloc(s,(i+1+1000)*32);
if (NULL==s1) return 3;
s=s1;
}
------解决思路----------------------
统计一个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;
}