Точка с запятой в конце оператора if работает так, как если бы условие всегда истинно. Следующие фрагменты идентичны
if (cond);
{
// ...
}
if (cond) { }
// ...
Взгляните std::string
s compare method:
Возвращаемое значение
отрицательное значение, если *this
появляется перед последовательностью символов, указанной аргументами, в лексикографическом порядке
ноль, если обе последовательности символов сравниваются эквивалентно
положительное значение, если *this
появляется после последовательности символов, указанной аргументами, в лексикографическом порядке
Таким образом, вам лучше проверить, больше ли значение, чем ноль, для сортировки в порядке возрастания. Также существует оператор > для std::string
, что не приведет к возникшей ошибке.
Сводка (применено форматирование):
#include <fstream>
#include <iostream>
using namespace std;
void sortStrings(string* arr, int n) {
bool swapped = true;
int j = 0;
string tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < n - j; i++) {
if (arr[i].compare(arr[i + 1]) > 0) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
swapped = true;
}
}
}
}
int main() {
ifstream file("titles.txt");
string myArray[6];
for (int i = 0; i < 6; i++) {
file >> myArray[i];
}
sortStrings(myArray, 6);
for (int i = 0; i < 6; i++) {
cout << myArray[i] << ' ';
}
}