1

したがって、文字列の最初の文字と最後の文字の間の文字に技術的にインデックスを付け、内部をスクランブルしてから最初と最後の文字を追加する関数があります。句読点のある単語が厄介になることに気付くまでは、うまく機能します。句読点を同じインデックスにとどめたいのですが、そうする方法についてのアイデアはありますか?

string shuffle_word(string word){
    string scramble_str = "", full_scramble = "";
    if(word.length() > 2){
        scramble_str += word.substr(1, word.length()-2);  //indexes the inside string (excludes first and last char)
        random_shuffle(scramble_str.begin(), scramble_str.end());
        full_scramble = word[0] + scramble_str + word[word.length()-1]; //adds first and last char back on
        return full_scramble;
    }
    else{
        return word;
    }
}
4

3 に答える 3

0

私は次のようなものに行きます:

std::vector<int> punctuatuion_char_indicies = findIndiciesOfPunctuation(input_string);

std::string result = shuffle_word(input_string);


std::vector<int> punctuatuion_char_indicies2 = findIndiciesOfPunctuation(result);




for(int i=0; i< sizeOfPunctuationVectors ; ++i)
{
  std::swap( result[ punctuatuion_char_indicies[i] ], 
             result[ punctuatuion_char_indicies2[i] ); // std::swap is in <algorithm>
}

または、 punctuatuion_char_indicies ベクトルを使用して、シャッフル関数を部分的に実行できます。

于 2013-10-11T22:12:37.970 に答える