试图删除标点符号并计算单词

时间:2016-07-23 04:43:28

标签: c string file-io

我试图从一个单词中删除所有标点符号。程序读取一个文件,然后使用哈希计算每个单词的所有出现次数。它主要起作用。当我遇到这条线时,我遇到了麻烦

, , ,  , , , , , ,  . ./  . /   !@#$%^&*()_(&*^%&^%$%$%##%$%$# %%%$  ^%%^ % ^ %^&^ &^ &^ &^&^ &^ &^ &^ &^ %^% ^ % %$ %$ %$

我的程序打印出" , 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;
}

1 个答案:

答案 0 :(得分:0)

我明白了。我改变了

  

if(word!= NULL || word [0]!='\ 0')

  

if(word [0]!=''&amp;&amp; word [0]!='\ 0')

现在它完美无缺。