0

文字列のベクトルがあります:vectorElements各文字列の先頭を指す*charのベクトルを作成したいと思います。私の目的は、各文字列を1文字ずつトラバースできるようにすることです。最終的には、文字列のベクトルを並べ替えたいと思います。注:文字列には整数値を含めることができます。その場合、数値に基づいて並べ替えます。

4

2 に答える 2

2

C ++で記述している場合はstring、のCスタイル配列の代わりにC++を使用することをお勧めしますchar。でイテレータを取得し、イテレータでbegin()オーバーロードされた演算子を使用して次の文字に移動することで、各文字を繰り返し処理できます(文字列の最後に到達したかどうかを確認するに++は、によって返されたイテレータを確認してください)。end()オーバーロードされた演算子を使用して、Cスタイルの文字列内の文字を参照することもできます[]

したがって、avector<string>が必要な場合があります。

文字列を並べ替えるには、ヘッダーsortで関数を使用することをお勧めします。algorithm常に字句的にソートしているわけではないため、2つの文字列を比較する独自の関数を定義する必要があります。

比較のための擬似コード:

while (i < str1.length() && i < str2.length())
  if (!isDigit(str1[i]) || !isDigit(str2[i]))
    // Lexical comparison
    if (str1[i] != str2[i])
      i++
    else
      return str1[i] < str2[i]
  else // If both are digits
    // parseInt will parse the number starting from current position
    // as positive integer
    // - It will consume as many characters as possible (greedily) and
    // return the parsed number plus the number of characters consumed
    // - If the number is very large (exceed 64-bit), you may want to 
    // only find the length of the number and write another
    // comparison function for big numbers.
    // The code below assumes no overflow
    (num1, len1) = parseInt(str1, i)
    (num2, len2) = parseInt(str2, i)
    if (num1 == num2)
      i += len1
    else
      return num1 < num2

if (str1.length() == str2.length())
  return false
else
  return str1.length() < str2.length()
于 2012-06-11T01:20:16.667 に答える
0

std::sortを使用できます。

for ( int i=0; i<vec.size(); ++i )
{
    std::string & str = vec[i];
    std::sort(str.begin(), str.end());
}

デモ

于 2012-06-11T01:16:59.617 に答える