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