Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185

Помогите плиз с алгоритмом проги (переставить слова в строке)

30.10.2011, 13:14. Показов 3116. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: В заданном тексте поменять местами каждые два соседних слова.
Но нужно сделать, не используя библиотеки string.

Допустим есть строка
C++
1
char string[] = "В заданном тексте поменять местами каждые два соседних слова";
Должно получиться
C++
1
char new_string[] = "заданном В поменять тексте каждые местами соседних два слова";
Как переставить слова...?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2011, 13:14
Ответы с готовыми решениями:

Помогите плиз с алгоритмом проги (нужно отсортировать матрицу)
Задача: Характеристикой столбца целочисленной матрицы назовём сумму модулей его отрицательных нечётных элементов. Переставляя столбцы...

Переставить слова в строке
Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами. Результат запишите в строку и выведите...

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

12
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 13:43
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
Помогите плиз с алгоритмом проги
1. получаете указатель на начало каждого слова
2. создаете новую строку заполняя её словами в нужном порядке
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 14:05  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
получаете указатель на начало каждого слова
В этом и сложность
0
Фрилансер
Эксперт С++
 Аватар для Dekio
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,373
Записей в блоге: 1
30.10.2011, 14:11
Если в С то можно через strtok
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 14:12  [ТС]
Неа, нужно c++ и работать с указателями
0
Фрилансер
Эксперт С++
 Аватар для Dekio
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,373
Записей в блоге: 1
30.10.2011, 14:13
Валентин^_^, да какая разница? Строка же С-подобная.
strtok возвращает указатель на нужный элемент
0
48 / 48 / 24
Регистрация: 29.10.2011
Сообщений: 154
30.10.2011, 14:28
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
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main() {
    string str = "In this text swap words";
    vector<int> vector_of_index;
    vector<string> words;
    for(int i = 0; i < str.length(); i++) {
        if(str[i]==' ') {
            vector_of_index.push_back(i);
        }
    }
    words.push_back(str.substr(0,vector_of_index[0]));
    for(int i = 0; i < vector_of_index.size()-1; i++) {
        words.push_back(str.substr(vector_of_index[i],vector_of_index[i+1] - vector_of_index[i]));
        
    }
    words.push_back(str.substr(vector_of_index[vector_of_index.size()-1]));
    
    for(int i = 0; i < words.size()-1; i++) {
        swap(words[i],words[i+1]);
        i++;
    }
    for(int i = 0; i < words.size(); i++) {
        cout << words[i] << endl; // "this In swap text words";
    } 
 
    system("pause");
    return 0;
}
Решение "в лоб", не красиво и объемно, нужно будет код изменить
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 14:51  [ТС]
Цитата Сообщение от YouDoItWrong Посмотреть сообщение
Решение "в лоб", не красиво и объемно, нужно будет код изменить
Спасиб, сейчас посмотрим..)

Добавлено через 16 минут
а вообще можно эту задачу решить без использования #include <vector> #include <string>? т.к. по факту мы этого еще не изучали.. хотелось бы решение с указателями и char string[]
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 14:57
разбиение строки на слова с
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
указателями и char string[]
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
 
#define DELIM " \t\n,.:;!?@#$^*()[]{}-+=\\/"
 
int main(void)
{
    char str[] = "Hello World! The world is piece of shit.", *ptr = NULL;
 
    for (ptr = strtok(str, DELIM); ptr != NULL; ptr = strtok(NULL, DELIM))
    {
        printf("%s\n", ptr);
    }
 
    return 0;
}
Добавлено через 22 секунды
http://cplusplus.com/reference... ng/strtok/
0
48 / 48 / 24
Регистрация: 29.10.2011
Сообщений: 154
30.10.2011, 14:58
Можно конечно, если хочешь писать что то на подобие моего кода (а я не советую ), то тебе нужно будет просто написать пару функций типо: char* _substring(char *a,const int from,const int to); которая копирут подстроку из строки а и возвращает на нее указатель, нужен динамический массив для хранения слов ну как то так.
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 15:16  [ТС]
ну вот допустим
C++
1
2
3
4
5
6
    char str[] = "В заданном тексте поменять местами каждые два соседних слова.", *ptr;
 
    for(ptr = strtok(str, " "); ptr != NULL; ptr = strtok(NULL, " "))
    {
        cout << ptr << " | ";
    }
и есть char new_string[500], каким образом записать слова в массив? понимаю, вопрос глупый, но все же..
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 15:40
например, но этот вариант с недостатком над которым будешь думать сам!
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
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <string.h>
 
#define DELIM " \t\n,.:;!?@#$^*()[]{}-+=\\/"
#define MAX_COUNT_WORDS 100
 
int main(void)
{
    char str[] = "Hello World! The world is piece of shit.", 
        *ptr = NULL,
        *word[MAX_COUNT_WORDS] = { NULL },
         output[500] = { 0 };
 
    unsigned i = 0, size;
 
    for (ptr = strtok(str, DELIM); ptr != NULL; ptr = strtok(NULL, DELIM), ++i)
    {
        word[i] = ptr;
    }
 
    size = i;
    
    for (i = 0; i < size - 1; i += 2)
    {
        strcat(output, word[i + 1]);
        strcat(output, " ");
        strcat(output, word[i]);
        strcat(output, " ");
    }
 
    printf("%s", output);
 
    return 0;
}
1
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 15:51  [ТС]
недостаток в том, что если количество слов нечетное - то последнее слово игнорируется.. сейчас буду смотреть, а так спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2011, 15:51
Помогаю со студенческими работами здесь

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

В строке переставить слова в обратной последовательности
Задание 1 В строке, содержащей несколько слов, разделенных пробелом, переставить слова в обратной последовательности. Входные...

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru