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

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

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

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

Допустим есть строка
C++
1
char string[] = "В заданном тексте поменять местами каждые два соседних слова";
Должно получиться
C++
1
char new_string[] = "заданном В поменять тексте каждые местами соседних два слова";
Как переставить слова...?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2011, 13:14
Ответы с готовыми решениями:

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

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

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

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

12
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 13:43 2
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
Помогите плиз с алгоритмом проги
1. получаете указатель на начало каждого слова
2. создаете новую строку заполняя её словами в нужном порядке
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 14:05  [ТС] 3
Цитата Сообщение от Jupiter Посмотреть сообщение
получаете указатель на начало каждого слова
В этом и сложность
0
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
30.10.2011, 14:11 4
Если в С то можно через strtok
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 14:12  [ТС] 5
Неа, нужно c++ и работать с указателями
0
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
30.10.2011, 14:13 6
Валентин^_^, да какая разница? Строка же С-подобная.
strtok возвращает указатель на нужный элемент
0
48 / 48 / 24
Регистрация: 29.10.2011
Сообщений: 154
30.10.2011, 14:28 7
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  [ТС] 8
Цитата Сообщение от YouDoItWrong Посмотреть сообщение
Решение "в лоб", не красиво и объемно, нужно будет код изменить
Спасиб, сейчас посмотрим..)

Добавлено через 16 минут
а вообще можно эту задачу решить без использования #include <vector> #include <string>? т.к. по факту мы этого еще не изучали.. хотелось бы решение с указателями и char string[]
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 14:57 9
разбиение строки на слова с
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
указателями и 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 10
Можно конечно, если хочешь писать что то на подобие моего кода (а я не советую ), то тебе нужно будет просто написать пару функций типо: char* _substring(char *a,const int from,const int to); которая копирут подстроку из строки а и возвращает на нее указатель, нужен динамический массив для хранения слов ну как то так.
0
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 185
30.10.2011, 15:16  [ТС] 11
ну вот допустим
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
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 15:40 12
например, но этот вариант с недостатком над которым будешь думать сам!
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  [ТС] 13
недостаток в том, что если количество слов нечетное - то последнее слово игнорируется.. сейчас буду смотреть, а так спасибо)
0
30.10.2011, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2011, 15:51
Помогаю со студенческими работами здесь

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

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

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

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


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

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