Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;字符串操作以在字符串中查找相同的开始/结束范围_C++_String - Fatal编程技术网

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

C++ c++;字符串操作以在字符串中查找相同的开始/结束范围,c++,string,C++,String,我有一个字符串,其范围类似于“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 在PHP中,我需要在循环中执行以下操作: $pos = strpos($vlan_ranges, ","); $number_range = strtok($number_ranges, ","

我有一个字符串,其范围类似于“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

PHP中,我需要在循环中执行以下操作:

$pos = strpos($vlan_ranges, ",");
$number_range = strtok($number_ranges, ",");
$number = split("-", $range);
$number_start = $number[0];
$number_end   = $number[1];
<>但是不知道如何在C++中实现这一点。不熟悉C++语法。非常感谢您的帮助


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

我认为类似的东西可以工作:

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);
    }
}
std::string str=“1-1,2-3,4-4,…”;
大小\u t数字\u位;
对于(大小i=0;i
编辑:实际上我发布了一个无限循环。现在修复。

while((orig_str.find(“,”)=std::string::npos)和&(orig_str.find(“-”)=std::string::npos))
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;
{ sub=原始str.substr(0,原始str.find_first_of(“,”); 原始字符串=原始字符串substr(原始字符串find_first_of(“,”)+1);
你愿意使用正则表达式引擎吗?如果愿意,哪一个?不,我不能使用字符串操作引擎:(你为什么要删除另一个问题?你可以简单地等待有人回答。我在这里改进了它。在你投了反对票之后,很多人都不会看它。我被卡住了,需要继续讨论这个问题。@AJ。你错了。我没有投反对票(这对你来说并不难)。(当我这样做时,我通常会附带一个原因)循环条件可能是
,以防传入以
-
结尾的无效字符串。最大数字值只能是4000?我不确定他是否表示4000-4000是有效的。在这种情况下,您必须搜索下一个“-”来构造、比较和删除子字符串。@Ian Edwards:是的,您是对的,这只适用于单个数字。请重新编辑。是的,4000-4000是有效的。我将尝试此操作。@Marian其崩溃:在抛出“std::out\u of_range”what()的实例后调用terminate:basic\u string::substr中止