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 のみです。

PHPでは、ループで次のようなことをする必要があります:

$pos = strpos($vlan_ranges, ",");
$number_range = strtok($number_ranges, ",");
$number = split("-", $range);
$number_start = $number[0];
$number_end   = $number[1];

しかし、これがC ++でどのように行われるかはわかりません。C++ 構文に慣れていません。どんな助けでも大歓迎です。

追加: 標準の String クラスのみを使用してこれを行う必要があります。文字列操作エンジンが使えません。

4

2 に答える 2

2

私はこのようなものがうまくいくと思います:

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);
    }
}

編集:実際に無限ループを投稿しました。今修正しました。

于 2012-06-19T11:19:16.337 に答える
0
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;
于 2012-06-21T05:53:30.557 に答える