Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 17.11.2013
Сообщений: 113
1

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

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

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

Добавлено через 38 минут
Как из строки "вырезать" слово и вставить в другую?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2014, 19:26
Ответы с готовыми решениями:

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

В заданной строке поменять местами рядом стоящие символы между собой
Здравствуйте. Помогите написать программу: В заданной строке поменять местами рядом стоящие символы...

В строке пробел и запятую, стоящие рядом, поменять местами
Дана строка символов. В строке пробел и запятую, стоящие рядом, нужно поменять местами. Вывести...

В заданной строке поменять местами рядом стоящие символы между собой
В заданной строке поменять местами рядом стоящие символы между собой

5
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
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
2 / 2 / 0
Регистрация: 17.11.2013
Сообщений: 113
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
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
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
2 / 2 / 0
Регистрация: 17.11.2013
Сообщений: 113
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
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
10.03.2014, 23:46 6
Лучший ответ Сообщение было отмечено Spect как решение

Решение

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
10.03.2014, 23:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2014, 23:46
Помогаю со студенческими работами здесь

В заданной строке поменять местами рядом стоящие элементы между собой
В заданной строке поменять местами рядом стоящие элементы между собой.

В произвольном тексте из файла переставить местами слова стоящие на нечетных и четных местах и вывести в файл
Здравствуйте помогите с задачей что то не могу додуматься как сделать. В произвольном тексте из...

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

В исходной строке а$ переставить местами n-e и m-e слова
Не могу реализовать код к задаче! В исходной строке а$ переставить местами n-e и m-e слова....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru