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

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

Восстановить пароль Регистрация
 
Spect
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 75
10.03.2014, 19:26     Строки (В строке переставить местами рядом стоящие слова) #1
Задача: В строке переставить местами рядом стоящие слова.
Помогите сделать через 3 строки, именно через 3.
Т.е. берется 1 слово и записывается в 2 строку, берется 2 слово и записывается в 3 строку. И после этого, они вставляются на места друг друга. Как-то так))
Буду очень благодарен!

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

Поменять местами слова строки стоящие на четных и нечетных позициях C++
Строка: Выяснить, имеется ли в строке следующие два символа стоящие рядом. C++
Переставить местами строки C++
C++ 4. Найдите все слова в предложении, содержащие по две буквы М, не стоящие рядом, и определите их количество
Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 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
Spect
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 75
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, " "); подчеркивает " ", можно по подробнее!
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 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 слова будут считаться как одно третье.
Spect
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 75
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".
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 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);
Если помудрить со строками то можно найти недочеты (несколько пробелов и т.д.), но с простыми вариантами работает.
Yandex
Объявления
10.03.2014, 23:46     Строки (В строке переставить местами рядом стоящие слова)
Ответ Создать тему
Опции темы

Текущее время: 00:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru