我们不能像对数组进行经典排序(气泡排序之类的)那样对字符串进行排序吗?但这不起作用。
string newstr = "dcba";
for(int i = 0; i < (newstr.size())-1; i++)
{
for(int k = i+1; k < newstr.size(); k++)
{
if(newstr[i] > newstr[k])
{
temp = newstr[i];
newstr[k] = newstr[i];
newstr[i] = temp;
}
}
}
答案 0 :(得分:3)
编写的代码越少,所犯的错误越少,这是遵循的好规则。要对字符串进行排序,您可以执行以下操作:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string newstr = "dcba";
std::sort(newstr.begin(), newstr.end());
std::cout << newstr << "\n";
}
您的代码中的实际错误是由于swap的实现不正确造成的:
temp = newstr[i];
newstr[k] = newstr[i];
newstr[i] = temp;
应该是:
temp = newstr[k];
newstr[k] = newstr[i];
newstr[i] = temp;
或更简单地说:
std::swap(newstr[i], newstr[k]);
答案 1 :(得分:2)
您没有正确交换字符。
使用
temp = newstr[k];
代替
temp = newstr[i];
使用您的代码,您到处都在复制newstr [i],因为
temp = newstr[i]; // tmp = i
newstr[k] = newstr[i]; // k = i
newstr[i] = temp; // i = tmp = i
答案 2 :(得分:2)
掌握基础知识。您将循环运行到newstr.size()-1;
,这意味着您不考虑最后一个元素或到达它。您的交换逻辑也是错误的。
修改后的代码-
for(int i = 0; i < newstr.size(); i++)
{
for(int k = i+1; k < newstr.size(); k++)
{
if(newstr[i] > newstr[k])
{
std::swap(newstr[i] , newstr[k]);
}
}
}
您还可以执行std::sort(newstr.begin(),newstr.end());