使用选择排序对字符串排序

时间:2016-02-03 06:05:16

标签: c++ sorting

我正在尝试创建一个对字符串进行排序的函数,并且我已经创建了一个我认为应该可以工作的函数,但是toupper()函数似乎没有任何效果。我在这里缺少什么吗?

void selectionSort(string array[], int size) {
    int startScan, minIndex;
    string minValue;

    for(startScan=0; startScan<(size-1); startScan++) {
        minIndex = startScan;
        minValue = array[startScan];

        for(int index=startScan+1; index<size; index++) {
            string word = array[index];
            toupper(word[0]);
            if(array[index] < minValue) {
                minValue = array[index];
                minIndex = index;
            }
        }
        array[minIndex] = array[startScan];
        array[startScan] = minValue;
    }
}

2 个答案:

答案 0 :(得分:3)

toupper(word[0]);

此语句计算表达式toupper(word[0])的值,然后将结果抛出。

将其更改为:

word[0] = toupper(word[0])

答案 1 :(得分:2)

您未分配toupper()功能的返回值。但无论如何,它并没有做到,你可能认为它做了什么(无论如何word之后都没有使用过):它只会出现一个字母。 你可能想要做的是将整个词大写:

std::transform可以使用toupper作为参数。

#include <string>
#include <algorithm>
void selectionSort(string array[], int size) {
  int startScan, minIndex;
  string minValue;

  for (startScan = 0; startScan<(size - 1); startScan++) {
    minIndex = startScan;
    minValue = array[startScan];

    for (int index = startScan + 1; index<size; index++) {
      string word = array[index];
      std::transform(word.begin(), word.end(), word.begin(), ::toupper);
      if (array[index] < minValue) {
        minValue = array[index];
        minIndex = index;
      }
    }
    array[minIndex] = array[startScan];
    array[startScan] = minValue;
  }
}