我试图从一个单词中删除所有标点符号。程序读取一个文件,然后使用哈希计算每个单词的所有出现次数。它主要起作用。当我遇到这条线时,我遇到了麻烦
, , , , , , , , , . ./ . / !@#$%^&*()_(&*^%&^%$%$%##%$%$# %%%$ ^%%^ % ^ %^&^ &^ &^ &^&^ &^ &^ &^ &^ %^% ^ % %$ %$ %$
我的程序打印出" , 32
"
如果有单词会打印出来
"字,数字"
但是对于这种情况,它打印我假设是一个空字符串,我已经尝试了
这是我的主要内容。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"hash.h"
#define SIZE 5000
void fileRead(char * filename);
void fileWrite();
void removep(char * p);
struct listnode * hashTable[9000];
int main(int argc, char ** argv){
int i;
if(argc<2)
fprintf(stderr,"Enter filename \n");
hashCreate(hashTable, SIZE);
for(i=1; i<argc; i++){
fileRead(argv[i]);
}
fileWrite();
hashDelete(hashTable, SIZE);
return 0;
}
void fileWrite(){
FILE * file=fopen("wordfrequency.txt","w");
int i;
struct listnode * temp;
for(i=0;i<SIZE;i++){
temp=hashTable[i];
if(hashTable[i]->count!=0){
for(temp=hashTable[i]; temp!=NULL; temp=temp->next){
fprintf(file,"%s, %d\n",temp->word, temp->count);
}
}
}
fclose(file);
}
void fileRead(char * filename){
FILE * file = fopen(filename,"r");
char word[500];
if(!file){
fprintf(stderr,"Error opening file \n");
return;
}
while(fscanf(file, "%s", word)==1){
removep(word);
if(word!=NULL || word[0]!='\0')
hashAdd(word,hashTable,SIZE);
}
fclose(file);
}
void removep(char *p)
{
char *src = p, *dst = p;
while (*src)
{
if (ispunct((unsigned char)*src))
{
src++;
}
else if (isupper((unsigned char)*src))
{
*dst++ = tolower((unsigned char)*src);
src++;
}
else if (src == dst)
{
src++;
dst++;
}
else
{
*dst++ = *src++;
}
}
*dst = 0;
}
答案 0 :(得分:0)
我明白了。我改变了
if(word!= NULL || word [0]!='\ 0')
到
if(word [0]!=''&amp;&amp; word [0]!='\ 0')
现在它完美无缺。