【问题标题】:C++ error(converting wstring to string): cannot convert argument 1 from std::wchar_t to std::charC++ 错误(将 wstring 转换为字符串):无法将参数 1 从 std::wchar_t 转换为 std::char
【发布时间】:2015-01-13 07:57:32
【问题描述】:
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <math.h>
#include <iterator>
#include <set>
#include <string>
#include <Windows.h>

using namespace std;

/*
* dice coefficient = bigram overlap * 2 / bigrams in a + bigrams in b
* (C) 2007 Francis Tyers
* Modifications made by Stefan Koshiw 2010
* Now it outputs values [0..1]
* Released under the terms of the GNU GPL.
*/


float dice_coefficient(wstring string1, wstring string2);


void main()
{
    float dice = 0;
    wstring str1(L"save");
    wstring str2(L"gave");

    dice = dice_coefficient(str1, str2);
    cout << dice;
}


float dice_coefficient(wstring string1, wstring string2)
{

    set<string> string1_bigrams;
    set<string> string2_bigrams;

    //base case
    if (string1.length() == 0 || string2.length() == 0)
    {
        return 0;
    }

    for (unsigned int i = 0; i < (string1.length() - 1); i++) {      // extract     character bigrams from string1
        string1_bigrams.insert(string1.substr(i, 2));
    }
    for (unsigned int i = 0; i < (string2.length() - 1); i++) {      // extract     character bigrams from string2
        string2_bigrams.insert(string2.substr(i, 2));
    }

    int intersection = 0;

    // find the intersection between the two sets

    for (set<string>::iterator IT = string2_bigrams.begin();
        IT != string2_bigrams.end();
        IT++)
    {
        intersection += string1_bigrams.count((*IT));
    }

    // calculate dice coefficient
    int total = string1_bigrams.size() + string2_bigrams.size();
    float dice = (float)(intersection * 2) / (float)total;

    return dice;
}

在上面的代码中,“string1_bigrams.insert(string1.substr(i, 2));”和“string1_bigrams.insert(string1.substr(i, 2));”不工作。
我使用了 Visual Studio 2013 Ultimate。系统提示“无法从 'std::basic_string,std::allocator>' 转换为 'std::basic_string,std::allocator>' 1> 没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符" 请告诉我如何修复它。谢谢。

【问题讨论】:

    标签: c++ string similarity wstring


    【解决方案1】:

    最简单的解决方法是将set&lt;string&gt; 转换为set&lt;wstring&gt;

    set<wstring> string1_bigrams;
    set<wstring> string2_bigrams;
    
    .
    .
    .
    
    for (set<wstring>::iterator IT = string2_bigrams.begin();
    

    此外,您应该为 main 函数返回 int

    demo

    【讨论】:

      【解决方案2】:

      如果可以/想要的话,考虑使用std::set&lt;wstring&gt; 作为M M. 的建议。

      如果你不能出于任何原因......你可以使用这个:

      //string1_bigrams.insert(string1.substr(i, 2));
      string1_bigrams.insert(&string1[i], &string1[2]);
      

      您还应该考虑将函数参数作为参考传递,否则您在主函数中硬编码构造的字符串将被复制并传递给函数。

      float dice_coefficient(std::wstring &string1, std::wstring &string2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多