Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Spect
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 76
#1

Строки (В строке переставить местами рядом стоящие слова) - C++

10.03.2014, 19:26. Просмотров 833. Ответов 5
Метки нет (Все метки)

Задача: В строке переставить местами рядом стоящие слова.
Помогите сделать через 3 строки, именно через 3.
Т.е. берется 1 слово и записывается в 2 строку, берется 2 слово и записывается в 3 строку. И после этого, они вставляются на места друг друга. Как-то так))
Буду очень благодарен!

Добавлено через 38 минут
Как из строки "вырезать" слово и вставить в другую?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 19:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки (В строке переставить местами рядом стоящие слова) (C++):

В строке переставить местами рядом стоящие слова - C++
Здравствуйте, помогите пожалуйста написать программу, желательно использовать функцию strtok. Пытался склеивать, не смог реализовать. ...

Переставить местами слова в строке - C++
Переставить местами слова в строке.

Переставить соседние слова в строке местами - C++
добрый день, необходимо переставить соседние слова в строке местами. написал код для разбития строки на слова, в дальнейшем хочу...

Поменять местами слова строки стоящие на четных и нечетных позициях - C++
Нужна помощь в лабораторной. Для корифеев задачка простая, но для меня...х)) Написать программу, которая меняет местами слова введенной с...

Удалить из слова повторяющиеся 4 раза буквы, стоящие рядом - C++
удалить из слова повторяющиеся 4 раза буквы, стоящие рядом с++

Найти в тексте слова, содержащие две одинаковые буквы, стоящие рядом - C++
Имеется строка текста (на любом языке) из нескольких слов, разделённых пробелами и/или знаками препинания. Требуется найти в тексте и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
10.03.2014, 20:02 #2
Используйте функции
char *strchr(const char *, int); ищет символ в строке, начиная с головы и возвращает его адрес, или NULL если не найден
char *strncpy(char *toHere, const char *fromHere, size_t n); копирует до n байт строки из одного места в другое

Чтобы начать поиск с определенного места строки просто добавляйте позицию к строке
strchr(str+5, " "); // поиск пробела с пятого символа str[5]
с копированием также
strncpy(str2, str+5, 3) // копирует с 5 до 7го символа включительно из str в str2

P.S. Для работы этих функций подключите библиотеку string.h
1
Spect
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 76
10.03.2014, 22:05  [ТС] #3
Цитата Сообщение от Vaiz Посмотреть сообщение
Используйте функции
char *strchr(const char *, int); ищет символ в строке, начиная с головы и возвращает его адрес, или NULL если не найден
char *strncpy(char *toHere, const char *fromHere, size_t n); копирует до n байт строки из одного места в другое
Чтобы начать поиск с определенного места строки просто добавляйте позицию к строке
strchr(str+5, " "); // поиск пробела с пятого символа str[5]
с копированием также
strncpy(str2, str+5, 3) // копирует с 5 до 7го символа включительно из str в str2
P.S. Для работы этих функций подключите библиотеку string.h
А как копировать с пробела до пробела?
strchr(" ", " ") ?

Добавлено через 26 минут
Т.е. если написать strchr(str+1; " "); он найдет первое слово а как мне теперь его вырезать а не копировать?
Или можно только скопировать и потом удалить?

Добавлено через 1 час 23 минуты
Что-то не получилось, char *strchr(char *str, " "); подчеркивает " ", можно по подробнее!
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
10.03.2014, 23:09 #4
Цитата Сообщение от Spect Посмотреть сообщение
Что-то не получилось, char *strchr(char *str, " "); подчеркивает " ", можно по подробнее!
Ошибся немного ' ' используйте такие кавычки и один символ

Добавлено через 4 минуты
Похоже strchr не подойдет, нам нужно немного не то, нужен возврат номера символа, а возвращается адрес. Сейчас еще поищу и напишу

Добавлено через 22 минуты
Вот работающий код, проверил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    char str[256], str2[256], str3[256];
    int n;  // длина строки
    int i = 0;
    int nachalo, konec;
    printf("Put str: ");
    gets(str);
    n = strlen(str);
    while (i<n && str[i] != ' ') i++;
    i++;
    nachalo = i;
    while (i<n && str[i] != ' ') i++;
    konec = i;
    strncpy(str2, str + nachalo, konec - nachalo); //получили второе слово
    strncpy(str3, str + konec + 1, n - konec);      //получили все что после второго слова
    strncpy(str + nachalo, str3, n - konec);
    strncpy(str + nachalo + n - konec - 1, " ", 1);
    strncpy(str + nachalo + n - konec, str2, konec - nachalo);
    printf("%s", str);
Из минусов - если введете 4 слова, то остальные 2 слова будут считаться как одно третье.
1
Spect
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 76
10.03.2014, 23:20  [ТС] #5
Цитата Сообщение от Vaiz Посмотреть сообщение
Вот работающий код, проверил.
Спасибо!
Но работает только немного не так. Например ввожу "mmm vvv sss lll aaa kkk" получается "mmm sss lll aaa kkk vvv". А надо чтобы получилось "vvv mmm lll sss kkk aaa".
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
10.03.2014, 23:46 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        char str[256], str2[256], str3[256];
    int n;  // длина строки
    int i = 0;
    int nachalo, konec, konec2;
    printf("Put str: ");
    gets(str);
    n = strlen(str);
    while (i < n && str[i] != ' ') i++;
    i++;
    nachalo = i;
    while (i < n && str[i] != ' ') i++;
    if (i != n)
    {
        konec = i;
        i++;
        while (i < n && str[i] != ' ') i++;
        konec2 = i;
        strncpy(str2, str + nachalo, konec - nachalo); //получили второе слово
        strncpy(str3, str + konec + 1, konec2 - konec - 1);      //получили второе слово
 
        strncpy(str + nachalo, str3, konec2 - konec - 1);
        strncpy(str + nachalo + konec2 - konec - 1, " ", 1);
        strncpy(str + nachalo + konec2 - konec, str2, konec - nachalo);
    }
    printf("%s", str);
Если помудрить со строками то можно найти недочеты (несколько пробелов и т.д.), но с простыми вариантами работает.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2014, 23:46
Привет! Вот еще темы с ответами:

Строка: Выяснить, имеется ли в строке следующие два символа стоящие рядом. - C++
Доброго времени суток) Дана строка символов. Выяснить имеется ли в строке следующие два символа стоящие рядом. Заранее спасибо. ...

Найдите все слова в предложении, содержащие по две буквы М, не стоящие рядом, и определите их количество - C++
Найдите все слова в предложении, содержащие по две буквы М, не стоящие рядом, и определите их количество c++

Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире - C++
Помогите написать пожалуйста программу: &quot;Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире.&quot; ...

Переставить слова местами - C++
Здравствуйте,помогите решить задачу Условие: В строке второе и последнее слово записать наоборот, за последним словом – точка.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.03.2014, 23:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru