我试图使用递归函数按字母顺序打印字符串,但它给出了字符串下标超出范围错误。
string alpha(string word)
{
char temp;
int count = 0;
int i = 0;
while (count < word.size())
{
if (word[i] > word[i + 1])
{
temp = word[i];
word[i] = word[i + 1];
word[i + 1] = temp;
i++;
if (i >= word.size())
{
alpha(word);
}
}
else
{
count++;
}
}
return word;
}
答案 0 :(得分:1)
因为您使用if (word[i] > word[i + 1])
,所以必须在结束之前停止循环...并且您需要count
或i
(不是两者);
while (i + 1 < word.size()) // <-- like so
或者您可以使用
int i = 1;
while (i < word.size()) {
if (word[i - 1] > word[i]) {
答案 1 :(得分:0)
我会这样做:
std::string alpha(std::string s)
{
std::sort(s.begin(), s.end());
return s;
}
如果您想自己实施O(n²)
排序算法,可以这样做:
std::string alpha(std::string word)
{
for (std::size_t i = 0; i != word.size(); ++i) {
for (std::size_t j = i + 1; j != word.size(); ++j) {
if (word[j] < word[i]) {
std::swap(word[i], word[j]);
}
}
}
return word;
}
或者是一个反复的人:
std::string alpha(std::string word)
{
auto it = std::is_sorted_until(word.begin(), word.end());
if (it == word.end()) {
return word;
}
std::size_t i = std::distance(word.begin(), it);
do {
std::swap(word[i], word[i - 1]);
--i;
} while (i > 1 && word[i] < word[i - 1]);
return alpha(word);
}