строка — как перевернуть слова в предложении без вспомогательных методов в c ++?

Мне нужно прочитать строку символов (с пробелами) и перевернуть ее.

Сначала я прочитал строку символов из консоли.

char array[100];

for(int i = 0; i < sizeof(array); i++)
array[i] = '0';

for(int i = 0; i < sizeof(array); i++)
cout<<array[i]<<" ";

cout<<"\n\nenter your string: ";

cin.getline(array, 100);

cout<<"\n";

for(int i = 0; i < sizeof(array); i++)
cout<<array[i]<<" ";

Затем я создаю и заполняю массив индексов. (помнить космические пятна)

cout<<"\n\nindexes: ";

int indexes[20];
for(int i = 0; i < 20; i++)
{
indexes[i] = 0;
}

// filling the indexes array
int j = 0;
for(int i = 0; i < sizeof(array); i++)
{
if(array[i] == '0') break;
if(array[i] == ' ')  indexes[j++] = i;
}
// validating indexes array
for(int i = 0; i < sizeof(indexes); i++)
{
//if(indexes[i] == 0) break;
cout<<indexes[i]<<" ";
}

Вот начало моего (я думаю, не умного) алгоритма. Я хочу поменять первое слово.
Похоже, этот кусок никогда не выполняется. Зачем?

// first word
int j1 = indexes[0]-1;
for(int i = 0; i > indexes[0]; i++)
{
new_array[i] = array[j1-i];
cout<<"\naction\n";
}

Вывести new_array на консоль:

for(int x = 0; x < sizeof(new_array); x++)
{
if(new_array[x] == '0') break;
cout<<new_array[x]<<" ";
}

Результат:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

введите вашу строку: это моя строка

t h i s i s m y s t r i n g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

индексы: 4 7 10 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -858993460 -858993460 100 -85
8993460 -858993460 100 -858993460 -858993460 100 -858993460 -858993460 193628786
0 544434464 1931508077 1852404340 805314663 808464432 808464432 808464432 808464
432 808464432 808464432 808464432 808464432 808464432 808464432 808464432 808464
432 808464432 808464432 808464432 808464432 808464432 808464432 808464432 808464
432 -858993460 -742139265 6421640 18244041 1 9932784 9928256 -742139185 0 0 2129
674240 -1920 570026249 0 6422528 0 6421580 0 6421712 18223374 -759898201 0 64216
48 18244541

новый массив:

Почему массив индексов содержит эти числа после нулей? Его длина всего 20.
И почему new_array не печатается?

Я знаю, что мое решение очень очень громоздко)

4

Решение

Ваша интуиция права: петля не выполняется Проблема в строке:

for(int i = 0; i > indexes[0]; i++)

Сравнение должно быть i < indexes[0],

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]