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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
30.10.2011, 13:14     Помогите плиз с алгоритмом проги (переставить слова в строке) #1
Задача: В заданном тексте поменять местами каждые два соседних слова.
Но нужно сделать, не используя библиотеки string.

Допустим есть строка
C++
1
char string[] = "В заданном тексте поменять местами каждые два соседних слова";
Должно получиться
C++
1
char new_string[] = "заданном В поменять тексте каждые местами соседних два слова";
Как переставить слова...?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.10.2011, 13:43     Помогите плиз с алгоритмом проги (переставить слова в строке) #2
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
Помогите плиз с алгоритмом проги
1. получаете указатель на начало каждого слова
2. создаете новую строку заполняя её словами в нужном порядке
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
30.10.2011, 14:05  [ТС]     Помогите плиз с алгоритмом проги (переставить слова в строке) #3
Цитата Сообщение от Jupiter Посмотреть сообщение
получаете указатель на начало каждого слова
В этом и сложность
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
30.10.2011, 14:11     Помогите плиз с алгоритмом проги (переставить слова в строке) #4
Если в С то можно через strtok
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
30.10.2011, 14:12  [ТС]     Помогите плиз с алгоритмом проги (переставить слова в строке) #5
Неа, нужно c++ и работать с указателями
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
30.10.2011, 14:13     Помогите плиз с алгоритмом проги (переставить слова в строке) #6
Валентин^_^, да какая разница? Строка же С-подобная.
strtok возвращает указатель на нужный элемент
YouDoItWrong
46 / 46 / 7
Регистрация: 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;
}
Решение "в лоб", не красиво и объемно, нужно будет код изменить
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
30.10.2011, 14:51  [ТС]     Помогите плиз с алгоритмом проги (переставить слова в строке) #8
Цитата Сообщение от YouDoItWrong Посмотреть сообщение
Решение "в лоб", не красиво и объемно, нужно будет код изменить
Спасиб, сейчас посмотрим..)

Добавлено через 16 минут
а вообще можно эту задачу решить без использования #include <vector> #include <string>? т.к. по факту мы этого еще не изучали.. хотелось бы решение с указателями и char string[]
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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/clibrary/cstring/strtok/
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
30.10.2011, 14:58     Помогите плиз с алгоритмом проги (переставить слова в строке) #10
Можно конечно, если хочешь писать что то на подобие моего кода (а я не советую ), то тебе нужно будет просто написать пару функций типо: char* _substring(char *a,const int from,const int to); которая копирут подстроку из строки а и возвращает на нее указатель, нужен динамический массив для хранения слов ну как то так.
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
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], каким образом записать слова в массив? понимаю, вопрос глупый, но все же..
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 15:51     Помогите плиз с алгоритмом проги (переставить слова в строке)
Еще ссылки по теме:

C++ Переставить местами слова в строке
Строки (В строке переставить местами рядом стоящие слова) C++
Переставить слова в строке в порядке убывания количества цифр в них C++

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

Или воспользуйтесь поиском по форуму:
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
30.10.2011, 15:51  [ТС]     Помогите плиз с алгоритмом проги (переставить слова в строке) #13
недостаток в том, что если количество слов нечетное - то последнее слово игнорируется.. сейчас буду смотреть, а так спасибо)
Yandex
Объявления
30.10.2011, 15:51     Помогите плиз с алгоритмом проги (переставить слова в строке)
Ответ Создать тему
Опции темы

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