字频 strcmp 使用结构数组无限工作



我想逐字读取,并将哪个单词与结构数组中的内容进行比较。 如果我没有,我想添加第一个空白点。

#include <iostream>
#include <fstream>
#include <string>
#include<string.h>
using namespace std;
struct cuvinte{
    char *cuvant;
    int numar;
};
int main()
{
    cuvinte multime[100];
    ifstream f;
    f.open("input.txt");
    string str;
    while(getline(f,str))
    {
        char * cuvant = new char[str.size() + 1];
        char * abc = new char[str.size() + 1];
        copy(str.begin(), str.end(), abc);
        cuvant = strtok (abc,"     ,/_");
        while(cuvant!=NULL)
        {
            for(int i=0;i<10;i++)
            {
                cout<<cuvant;
                if(strcmp(cuvant,multime[i].cuvant)==0)
                    multime[i].numar++;
                else
                {
                    for(int j=0;j<10;j++)
                        if(multime[j].numar==0)
                        {
                            multime[j].cuvant=cuvant;
                            multime[j].numar=1;
                        }
                }
            }
            cuvant = strtok ( NULL , "    ");
        }
    }
    return 0;
}

Strcmp 无限工作,只取第一个词;我不知道为什么。

在C++中,它应该只需要几行:

#include <string>
#include <fstream>
#include <unordered_map>
using WordFrequency = std::unordered_map<std::string, unsigned>;
WordFrequency read_words(std::istream& s) {
    WordFrequency wf;
    for(std::string word; s >> word;)
        ++wf[word];
    return wf;
}
int main() {
    std::fstream f("input.txt");
    auto wf = read_words(f);
}

在使用word之前,您可能希望将其小写并删除所有标点符号,以便您的字典不包含同一单词的单独条目,例如 Ororor,

最新更新