按字母顺序排列字符串数组(甚至是*ptr)
Arranging an array of strings (or even a *ptr) alphabetically
我读了五六篇关于如何重新排列数组的文章,有些是按字母顺序排列的,有些是按数字顺序排列的,我也读了那一章。这是我最后想到的,
void selectionSort (string array[], int size)
{
int startScan, minIndex;
string minValue;
for(startScan = 0; startScan<(size-1); startScan++)
{
minIndex = startScan;
minValue = array[startScan];
string temp;
for(int index = startScan+1; index<size; index++)
if(array[index] <minValue)
{
minValue = array[index];
minIndex = index;
}
}
array[minIndex] = array[startScan];
array[startScan] = minValue;
system("pause");
}
显然,这不起作用。当我运行它的时候,它会向我大喊需要打破它。我认为这是可行的,如果它是int或任何数字类型。见鬼,如果我将它设置为char类型的ASCII值,它甚至可能运行。但实际的赋值是一个字符串,我就是弄不清楚。我想过尝试剪掉第一个字母并将其转换为char以按字母顺序排列,但有些字符串具有相同的姓和不同的名,因此这也不起作用。
我需要修改什么来允许我的排序按字母顺序排列我的数组?
UPDATE更新了我在阅读注释和重新回顾本书后更改的代码。当运行代码时,我不再得到错误,但它仍然不排序!
所以出于某种原因你选择不使用std,(你有swap和sort)
我想提醒你注意:
temp = array[count];
array[count]=array[(count+1)]; <-- when count is exactly size -1 you are going to commit overflow to your array
array[(count+1)] = temp;
你需要确保你的索引不超过数组的边界…:
for(int count = 0; count<size -1 ; count++)
(顺便看看std::swap,可能更适合您使用)
有一个明显的越界问题,当你做array[count
+ 1]
(当count == size - 1
)。我不明白代码怎么将对任何东西进行排序。你在用什么算法使用?
对于初学者来说,当您到达数组的末尾时,您将得到一个索引越界异常。由于访问的是count+1,因此for循环需要在size-1处停止。这看起来像是冒泡排序的开始,但没有完全实现。对冒泡排序做一点研究,你应该很快就能得到答案。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- 如何删除带有 int ptr 指向它的数组
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 有没有办法在数组上遍历shared_或任何"smart" ptr?
- 从数组的共享ptr访问共享ptr
- 分配const char *ptr数组参数?c++
- 按字母顺序排列字符串数组(甚至是*ptr)
- 使用ptr-to-ptr数组
- c++类的析构函数包含ptr到对象的数组