[英]creating vectors of character pointers to point to vector of strings
我有一个字符串向量:vectorElements我想创建一个* char的向量来指向每个字符串的开头。 我的目标是能够逐个字符地遍历每个字符串。 最后,我想对字符串向量进行排序。 注意:字符串可能包含整数值。 在这种情况下,我将根据他们的数值进行排序。
如果您使用C ++编写,最好使用C ++ string
而不是C样式的char
数组。 您仍然可以通过使用begin()
获取迭代器来迭代每个字符,并在迭代器上使用重载的operator ++
来遍历下一个字符(使用end()
返回的迭代器进行检查,以了解是否到达字符串的末尾或不)。 您还可以使用重载的operator []
引用C风格的字符串中的字符。
因此, vector<string>
可能就是您所需要的。
要对字符串进行排序,您可能希望在algorithm
标题中使用sort
函数。 由于您不是一直在词法上对它们进行排序,因此您必须定义自己的函数来比较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()
你可以使用std :: sort 。
for ( int i=0; i<vec.size(); ++i )
{
std::string & str = vec[i];
std::sort(str.begin(), str.end());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.