Поменяйте местами строку в C

Я хочу перевернуть строку в определенном формате.

Например, "My name is Nishant" следует преобразовать в "Nishant is name My".


c
person Nishant    schedule 29.08.2011    source источник
comment
Что у вас есть на данный момент?   -  person Codo    schedule 29.08.2011
comment
Что вы тр ... о, верно, что сказал Кодо ан Пьер.   -  person slezica    schedule 29.08.2011
comment
Кроме того, если это домашнее задание, его следует упомянуть в вопрос.   -  person outis    schedule 29.08.2011
comment
Нет, это было задано в моем интервью   -  person Nishant    schedule 29.08.2011
comment
ввод: меня зовут Нишант, а вывода - меня зовут Нишант, это нужно делать без использования функции c lib. Об этом спрашивали в моем интервью.   -  person Nishant    schedule 29.08.2011


Ответы (2)


Если у вас есть слова в массиве char[] words, это простой цикл:

for (i = 0; i < mid; i++)
    exchange(words[i], words[number_of_words - i]);

для разумных определений mid, number_of_words и exchange.

Если все, что у вас есть, - это большой символ, содержащий весь оператор, полезно сначала выполнить strtok. Затем используйте вышеуказанный цикл.

person Mihai Maruseac    schedule 29.08.2011
comment
Привет ... Михай на самом деле это должно быть сделано на C без использования функций C lib - person Nishant; 29.08.2011

Передайте привет вашему инструктору. Если это домашнее задание, вам следует написать код самостоятельно.

Вот небольшая подсказка: используйте указатель char для итерации по каждому символу в массиве, пока вы не нажмете терминатор NUL в конце. Теперь повторяйте в обратном порядке, пока не дойдете до пробела. Сохраните свое место в другом указателе, переместитесь вперед на один, затем скопируйте каждый из символов до, но не включая NUL, в свой выходной буфер.

Теперь извлеките позицию этого последнего пробела в том другом указателе, где вы сохранили свое место, и снова сделайте резервную копию. Когда вы продвигаетесь вперед, вам действительно нужно остановиться, когда вы встречаетесь либо с пробелом NULL - ASCII '\ 0', либо с нулевым байтом, а не только с NUL.

Было бы немного быстрее, если бы вы сохраняли позиции каждого из пробелов в каком-то списке, когда вы выполняете итерацию вперед в начале. Таким образом, вам не нужно выполнять итерацию назад по всей строке с короткими итерациями по каждому слову. Код будет немного сложнее.

Повышение эффективности было бы незначительным для коротких строк, таких как отдельные английские предложения, но было бы довольно много, если бы вы реверсировали большой файл, который вы только что прочитали в память.

person Mike Crawford    schedule 29.08.2011