在搜索单词时使用问号代表任何字符

时间:2016-02-02 04:20:53

标签: c++ string dictionary

对于我尝试编写的程序,读入.txt文件,然后计算单词数(我使用map)。程序会提示用户输入要查找的单词,然后显示该单词在文件中的次数。我应该有一个包括"?"代替单词中的字母,并打印文件中的单词符合描述的次数。 "?"可以代表另一个字母或空格。我不知道如何使用它,任何帮助将不胜感激!

实施例: 请输入一个字:a ?? 单词并在文档中出现4次。单词在文档中出现1次。单词a在文档中出现一次

问号字符由用户输入,可代表任何其他字符。程序应该搜索文件,找到并计算适合的任何可能性。例如,如果用户输入了?d,则单词"和"可能是计算的可能性。

#include <iostream>
#include <map>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char *argv[]) {
    if (argc != 2)
        cout << "invalid usage" ;
    //open file
    ifstream infile;
    infile.open(argv[1]);
    //variables
    map<string, unsigned int> wCount;
    int count = 0;
    int uCount = 0;
    //lowercase
    while (!infile.eof()) {
        string text;
        infile >> text;
        for (int i=0; i < text.length(); i++) {
            text[i] = tolower(text[i]);
        }

        //count words
        if (wCount.find(text) == wCount.end()) {
            wCount[text] = 1;
            count++;
            uCount++;
        }
        else {
            wCount[text]++;
            count++;
        }
    }
    cout << "The total number of word found in the file was " << count << endl;
    cout << "The number of unique words found was " << uCount << "." << endl;
    cout << "Enter the word you want to find: " << "";
    //find(infile, word);
    string in = "";
    getline(cin, in);
    while(in != "EOF") {
            cout << "The word " << in << " appears " << wCount[in] << " times in the file" << endl;
            cout << "Please enter a word: " << "";
            getline(cin, in);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

我喜欢这些问题。它们在许多不同的计算机科学领域都有应用;特别是生物信息学。这应该让你开始。按照Galik的建议,您可以:

1)从字符串

中删除问号字符
std::string strip_wild_card(const std::string &pattern) {
    int q_index = pattern.find("?");
    return pattern.substr(0, q_index);
}

2)在文本中查找模式的出现次数

bool wild_card_compare(const std::string &pattern, const std::string &text) {
    //implement this
    if(pattern is found in text)
        return true
    else
        return false
}

提示:要检查这一点,我们可以使用STL中的find函数。希望这可以帮助。祝你好运!