【问题标题】:compare two strings by individual characters C++按单个字符比较两个字符串 C++
【发布时间】:2016-12-10 23:13:42
【问题描述】:

正在开发一个将参数与文件中的文本进行比较的程序(我的文件是一个包含很多英文单词的字典)。

目前,应用程序仅在完全匹配的字符串中工作。

想知道是否有一种方法可以将输入的部分字符串与文件中的完整字符串进行比较并使其匹配。 例如,如果 arg 是 ap,它会匹配到 apple, application Alliance ext。

# include <iostream>
# include <fstream>
# include <cstdlib>
# include <string>
using namespace std;


int main ( int argc, char *argv[] ) {

    ifstream inFile;
    inFile.open("/Users/mikelucci/Desktop/american-english-insane");

    //Check for error

    if (inFile.fail()) {
        cerr << "Fail to Open File" << endl;
        exit(1);
    }

    string word;
    int count = 0;


    //Use loop to read through file until the end

    while (!inFile.eof()) {
        inFile >> word;
        if (word == argv[1]) {
            count++;
        }
    }

    cout << count << " words matched." << endl;

    inFile.close(); 
    return 0;
}

【问题讨论】:

标签: c++ string split


【解决方案1】:

如果“匹配”是指“文件中的字符串包含输入中的字符串”,则可以使用 string::find 方法。在这种情况下,您的情况将如下所示:

word.find(argv[1]) != string::npos

如果“匹配”是指“文件中的字符串以输入中的字符串开头”,那么您可以再次使用 string::find,但条件如下:

word.find(argv[1]) == 0

相关文档为here

【讨论】:

    【解决方案2】:

    首先将argv[1]复制到一个字符串中(并非绝对必要,但它使后续的比较更简单一些):

    std::string target(arg[1]);
    

    然后使用std::equal:

    if (std::equal(word.begin(), word.end(), target.begin(). target.end()))
    

    这种形式的equal(在 C++14 中添加)如果两个序列中较短的一个与较长的开头的相应字符匹配,则返回 true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2015-11-29
      • 1970-01-01
      • 2016-01-04
      • 2015-11-13
      相关资源
      最近更新 更多