Process353 2022-03-09 15:31 采纳率: 100%
浏览 621
已结题

error: no match for 'operator-'

问题遇到的现象和发生背景

编程题目:
编写一个程序,命名为findKthStr,找出输入的字符串中所有长度从小到大排第k个的的字符串,按出现顺序输出所有满足条件的字符串(用换行符分隔),若没有则什么也不输出。
第一行输入为即将输入的字符串个数n
第二行输入为参数k
之后n行为输入的字符串

示例
输入:
5
2
Hello
World
OOP
xs
oh
输出:
OOP

问题相关代码,请勿粘贴截图
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(string a, string b)//用于从小到大对str_vec排序
{
    return a.length()<b.length();
}

typedef vector<string> StrVec;
//找出输入的字符串中所有长度从小到大排第k个的的字符串,按出现顺序输出所有满足条件的字符串(字符串长度相同时k不变)
StrVec FindKthStr(StrVec str_vec, int k) 
{
    StrVec::size_type size = str_vec.size();
    sort(str_vec[0],str_vec[size-1],compare);
    int flag=1,count=0;
    int i;
    for(int i=0;i<size-1;i++)
    {
        if(str_vec[i].size()<str_vec[i+1].size())
            flag++;
        if(flag==k)
        {
            cout<<str_vec[i]<<endl;
            count=i;
        }
    }
    if(count)//count+1用于输出最后一个排第k个的字符串
        cout<<str_vec[count+1];

}

int main()
{
    StrVec str_vec;
    int n,k;//n为输入字符串的个数,k为输出第k个字符串
    string s;
    cin>>n>>k;
    for(int i=0;i<n;i++)
    {
        cin>>s;
        str_vec.push_back(s);
    }
    FindKthStr(str_vec,k);
    return 0;
}

运行结果及报错内容

进行编译时会报错error: no match for 'operator-' (operand types are 'std::__cxx11::basic_string' and 'std::__cxx11::basic_string')
std::__lg(__last - __first) * 2

请问如何解决

  • 写回答

3条回答 默认 最新

  • 关注

    (1)FindKthStr函数返回值改成void
    (2)sort(str_vec[0],str_vec[size-1],compare);改成sort(str_vec.begin(),str_vec.end(),compare);
    完整代码:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    bool compare(string a, string b)//用于从小到大对str_vec排序
    {
        return a.length()<b.length();
    }
    
    typedef vector<string> StrVec;
    //找出输入的字符串中所有长度从小到大排第k个的的字符串,按出现顺序输出所有满足条件的字符串(字符串长度相同时k不变)
    void FindKthStr(StrVec str_vec, int k) 
    {
        StrVec::size_type size = str_vec.size();
        sort(str_vec.begin(),str_vec.end(),compare);
        //sort(str_vec[0],str_vec[size-1],compare);
        int flag=1,count=0;
        int i;
        for(int i=0;i<size-1;i++)
        {
            if(str_vec[i].size()<str_vec[i+1].size())
                flag++;
            if(flag==k)
            {
                cout<<str_vec[i]<<endl;
                count=i;
            }
        }
        if(count)//count+1用于输出最后一个排第k个的字符串
            cout<<str_vec[count+1];
        
    }
    
    int main()
    {
        StrVec str_vec;
        int n,k;//n为输入字符串的个数,k为输出第k个字符串
        string s;
        cin>>n>>k;
        for(int i=0;i<n;i++)
        {
            cin>>s;
            str_vec.push_back(s);
        }
        FindKthStr(str_vec,k);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 三菱FX系列PLC串口指令
  • ¥15 cocos的js代码调用wx.createUseInfoButton问题!
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!
  • ¥15 Python程序,深度学习,有偿私
  • ¥15 扫描枪扫条形码出现问题
  • ¥35 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型