如何在C ++中用单词作为键填充地图

时间:2016-07-01 19:08:50

标签: c++ string dictionary stl

以下是情况:

我使用此作为输入:

table = new DataView(table, "", "Distance",
                     DataViewRowState.CurrentRows).ToTable()

现在我要填写string s; getline (cin , s); 类型的地图。此映射的关键字是输入字符串的单个单词。该值将存储单词的频率。

  

示例:输入字符串 - “Hello我的名字是OP Hello World”

     

地图应该像:

     

你好 - 2

     

我 - 1

     

名字 - 1

     

是 - 1

     

OP - 1

     

世界 - 1

我知道的方法是使用字符串操作将字符串分成一个单独的单词数组。

有没有其他有效的方法将字符串拆分为单词数组并用单词作为键填充地图?

4 个答案:

答案 0 :(得分:0)

  1. 您需要将输入字符串拆分为子字符串。
  2. 查找输入字符串中每个子字符串的出现次数。
  3. 将子字符串存储为键,并在地图中计为值。
  4. int main()
    {
        std::string input="Hello My name is OP Hello World";
        std::map<std::string, int> myMap;
        std::istringstream iss(input);
        while (iss) {
            std::string substr;
            std::getline(iss,substr,' ');
            int count = 0;
            auto pos = input.find(substr, 0);
            while (pos != std::string::npos) {
                ++count;
                pos = input.find(substr, pos + 1);
            }
            if(substr.size() != 0)
                myMap[substr] = count;
        }
        for (const auto &p : myMap) {
            std::cout << p.first << "=" << p.second << '\n';
        }
        return 0;
    }
    

    输出

    Hello=2
    My=1
    OP=1
    World=1
    is=1
    name=1
    

答案 1 :(得分:-1)

所以你说你的字符串被拆分但是你想找到一个更好的方法所以这里是最优雅的方式用于c ++ Split a string in C++中的字符串拆分,假设你的话是与 Whitespaces 分开。

现在你有了你的话,得到你的话并使用循环迭代所有这些,并在你的循环中使用这个命令:

WhateverYourMapName[WhateverTheCurrentWordIs]++;

此语句会将现有(word)的递增1. OR 它将添加新的(word)如果找不到,则1的初始

答案 2 :(得分:-2)

如果你有一个函数,可以根据分隔符将public static function addMenu( $name ){ $db = ConnectDB(); var_dump($name); echo '<br />'; $sql = "INSERT INTO " . self::getTableName() . " name VALUES :nameMenu"; $stmt = $db->prepare ( $sql ); $stmt->bindParam(':nameMenu', $name, PDO::PARAM_STR); $stmt->execute(); } 对象拆分成一个字符串数组,那么你的任务实际上非常简单:

std::string

答案 3 :(得分:-3)

使用strtok分割空格并迭代单词, 通过查找检查每个单词是否在地图中,并将其分配到地图中或更改其值的值。