我正在尝试创建一个对字符串进行排序的函数,并且我已经创建了一个我认为应该可以工作的函数,但是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;
}
}
答案 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;
}
}