【问题标题】:how to compare parts of strings which contains int?如何比较包含 int 的部分字符串?
【发布时间】:2021-05-14 17:57:30
【问题描述】:

假设我有 这是一个例子

string str1 = "programming 15"
string str1 = "programming 3"

如果我使用像 ==、 这样的普通比较,结果将返回编程 15 小于编程 3。 但是,如果我想比较 int 而不是 strings 之类的数字该怎么办? 如果它是字符串数组呢? 我的意思是字符串长度是可变的我用这样的东西来知道它是否包含字符串部分,如果我错了,请纠正我。

if(str1.find(str2) != std::string::npos)

这将返回真,因为它实际上包含它的一部分,或者我认为它会返回真. 注意:所有这些比较都在一个有序的链表中,所以我 100% 确定编程 3 将在编程 15 之后对任何其他类似的词相同,但最后有不同的数字。 列表中的所有元素都采用相同的格式。

【问题讨论】:

  • 不清楚添加到列表中的所有字符串是否具有相同的显示格式。
  • @VladfromMoscow 是的,所有元素都是 int 相同的格式程序 25 程序员 23 编程 15 编程 3 程序 23 这是输出的一部分
  • 把字符串分开,只考虑数字部分。如果格式始终是单词-空格-数字,那么使用std::istringstream stream(str); std::string discard; int val; stream >> discard >> val; 很容易做到这一点。如果格式更复杂但数字始终位于末尾,则从字符串的末尾开始并向后阅读,直到获得所有数字。如果这个数字可以在任何地方,请考虑与提出这种疯狂协议的人进行长时间的大声交谈。
  • @user4581301 不,数字总是在最后..我会尝试使用你的方法,谢谢:)
  • @user4581301 它确实有帮助,现在我能够替换 2 个节点.. 非常感谢。

标签: c++ string integer


【解决方案1】:
#include <iostream>
#include <string>
#include <regex>
using namespace std;


int getNum(const string& s)
{
    regex reg("([0-9]+)");
    smatch match;
    
    if( std::regex_search(s.begin(), s.end(), match, reg) ){
        string numInStr = match[0]; 
        return stoi(numInStr);
    }
    
    return -1;
}

int main()
{
    regex reg("([0-9]+)");
    const string str1 = "programming 15";
    const string str2 = "programming 13";
    smatch match;
    
    cout << getNum(str1) << endl;
    cout << getNum(str2) << endl;
    
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2020-10-03
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多