Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2010, 22:10   #1
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
Счастье поменять соседние слова местами

дана строка. нужно поменять соседние слова местами. подскажите что сделать.
может в массив занести номера пробелов или как то по другому???
alex(21) вне форума Ответить с цитированием
Старый 29.10.2010, 10:36   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если можно использовать потоки (в т.ч. строковые), то вот так можно считать строку в std::string и разбить ее на отдельные слова.
Код:
using namespace std;
string str;
getline(cin, str);
string text[10];   //Или можно посчитать число слов в str и сделать text динамическим массивом; для простоты пусть так
istringstream sstr(str);
int N = 0;
while (sstr >> text[N++]);
Если можно использовать только сишные функции, то аналогично используйте sscanf - он тоже будет считывать из строки по одному слову.
В общем, идея такова, что сначала у нас есть целая строка, а потом мы ее раскидываем по массиву строк пользуясь тем, что такие средства как stringstream и sscanf считают пробел за разделительный символ. Ну а в массиве строк поменять соседние элементы местами - тривиальная задача.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 05.11.2010, 14:40   #3
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

не совсем понял алгоритм действий. как это реализовать на Си (не Си++).
насколько я знаю, таких операторов там нет.
сначала я ввожу строку
gets(str);
затем нахожу длину строки
n=strlen(str);
затем в цикле просматриваю строку от 0 до n и пытаюсь записать номера пробелов в другой массив. что нужно делать дальше не могу придумать. а может есть другой способ решения данной задачи???

вот что то получилось для 2-х слов.
Код:
#include<stdio.h>
#include<string.h>
main()
{ int i=0,n,k;
  char str[200],str1[200],str2[200],str3[200];
  clrscr();
  printf("введите строку:\n");
  gets(str);
  while(str[i]!='\0')
  {if(str[i]==' ')
  i++;
  else
  {n=i;
  do
  i++;
  while(str[i]!=' ' && str[i]!='\0');
  k=i-n;
  strncpy(str1,str,k);
  n=i+1;
  do
  i++;
  while(str[i]!=' ' && str[i]!='\0');
  k=i-n;

  strncpy(str2,str+n,k);

  }
  strcat(str2, str1);

  puts(str2);
  }
  }
но кроме слов ещё выводит непонятные символы. где ошибка???

Последний раз редактировалось Stilet; 09.11.2010 в 10:14.
alex(21) вне форума Ответить с цитированием
Старый 20.02.2011, 16:28   #4
sem_1989
Пользователь
 
Аватар для sem_1989
 
Регистрация: 25.09.2010
Сообщений: 56
По умолчанию

чтобы прога не выводила непонятные символы необходимо очистить массивы str, str1, str2, str3 перед работой с ними - тоесть занести в них нули(в цикле) - потому что при инициализации в них заносится мусор(какието домезозойские остатки индусского кода).
sem_1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять местами слова в ячейке Нюни Microsoft Office Excel 28 05.12.2017 11:28
поменять местами слова в предложении (C++) Slicker Общие вопросы C/C++ 15 10.03.2011 10:17
Поменять местами слова в разных названиях компаний Cassini Microsoft Office Excel 6 26.05.2010 14:31
поменять местами слова в предложении (C++) Slicker Помощь студентам 3 30.05.2009 17:57
как поменять местами слова в файле? r-tem Общие вопросы C/C++ 6 01.12.2008 22:17