2016-02-03 8 views
1

Я пытаюсь создать функцию, которая сортирует строки, и я создал функцию, которая, как я думаю, должна работать, но функция 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; 
    } 
} 
+1

Вы не назначаете значение 'toupper()' возвращает. – Constantin

+1

Если у вас возникла проблема с 'toupper', зачем сбрасывать всю функцию сортировки на ничего не подозревающем читателе? Кроме того, вы, вероятно, shoukkd должны использовать 'std :: vector' и' std :: sort' в реальном коде. –

ответ

3
toupper(word[0]); 

Это утверждение вычисляет значение выражения toupper(word[0]), а затем бросает результат прочь.

Изменить это:

word[0] = toupper(word[0]) 
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; 
    } 
} 
Смежные вопросы