创建字符指针的向量以指向字符串的向量

时间:2012-06-11 00:34:59

标签: c++ string vector chars

我有一个字符串向量:vectorElements 我想创建一个* char的向量来指向每个字符串的开头。我的目标是能够逐个字符地遍历每个字符串。最后,我想对字符串向量进行排序。 注意:字符串可能包含整数值。在这种情况下,我将根据其数值进行排序。

2 个答案:

答案 0 :(得分:2)

如果您使用C ++编写,最好使用C ++ string而不是char的C样式数组。您仍然可以通过获取带有begin()的迭代器来遍历每个字符,并在迭代器上使用重载的运算符++来遍历下一个字符(使用end()返回的迭代器进行检查以了解您是否到达字符串的末尾或不)。您还可以使用重载的运算符[]引用C样式字符串中的字符。

因此,您可能需要vector<string>

要对字符串进行排序,您可能需要在algorithm标题中使用sort函数。由于你不是一直在词法上对它们进行排序,你必须定义自己的函数来比较2个字符串。

Pseudocode 用于比较:

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()

答案 1 :(得分:0)

您可以使用std::sort

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

Demo