首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++字符串操作以查找字符串中相同的开始/结束范围

c++字符串操作以查找字符串中相同的开始/结束范围
EN

Stack Overflow用户
提问于 2012-06-19 10:53:24
回答 2查看 303关注 0票数 0

我有一根绳子,它的范围类似于。"0-0,4-7,9-9",和我需要找出具有相同开始和结束的所有范围,并将它们修改为“0、4-7、9”。

我对字符串操作和c++并不放心,因此需要一些帮助。

输入字符串: "0-0,2-7,8-8,88-108“输出字符串: "0,2-7,8,88-108”

最大值可能仅为4000。

在中,我需要在循环中执行这样的操作:

代码语言:javascript
运行
复制
$pos = strpos($vlan_ranges, ",");
$number_range = strtok($number_ranges, ",");
$number = split("-", $range);
$number_start = $number[0];
$number_end   = $number[1];

但不知道如何在c++中做到这一点。不熟悉c++语法。任何帮助都是非常感谢的。

补充:我必须单独使用标准字符串类。我不能使用字符串操作引擎。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-21 05:53:30

代码语言:javascript
运行
复制
while ( (orig_str.find(",") != std::string::npos) &&  (orig_str.find("-") != std::string::npos) )
{
sub = orig_str.substr(0, orig_str.find_first_of(","));
orig_str = orig_str.substr(orig_str.find_first_of(",")+1);
cout << "sub = " << sub << endl;
cout << "orig_str = " << orig_str << endl;
if (sub.substr(0,sub.find_first_of("-")) == sub.substr(sub.find_first_of("-")+1) )
{
    sub.erase(0, sub.find_first_of("-")+1);
    cout << "sub2 = " << sub << endl;
    final = final + sub + ",";
    cout << "final = " << final << endl;
}
else
{
    final = final + sub + ",";
}
}
cout << "final2 = " << final << endl;
票数 0
EN

Stack Overflow用户

发布于 2012-06-19 11:19:16

我想像这样的东西能起作用:

代码语言:javascript
运行
复制
std::string str = "1-1,2-3,4-4,...";
size_t number_digits;

for (size_t i = 0; i < str.size(); ++i)
{        
    if(str.find("-", i)) != std::string::npos))
    {
        number_digits = str.find_first_of(",", i) - i - 1;
        if (str.substr(i - number_digits, i - 1) == str.substr(i + 1, i + number_digits))
            str.erase(i-number_digits, number_digits + 1);
    }
}

编辑:实际上,我发布了一个无限循环。现在修好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11099476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档