Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167
#1

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

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

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

Допустим есть строка
C++
1
char string[] = "В заданном тексте поменять местами каждые два соседних слова";
Должно получиться
C++
1
char new_string[] = "заданном В поменять тексте каждые местами соседних два слова";
Как переставить слова...?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 13:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите плиз с алгоритмом проги (переставить слова в строке) (C++):

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

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

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

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

Строки (В строке переставить местами рядом стоящие слова) - C++
Задача: В строке переставить местами рядом стоящие слова. Помогите сделать через 3 строки, именно через 3. Т.е. берется 1 слово и...

Переставить слова в строке в порядке убывания количества цифр в них - C++
Дан текст. Слова в строках переставить в порядке убывания количества цифр в них. как можно реализовать, подскажите пожалуйста. Хотя бы...

12
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.10.2011, 13:43 #2
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
Помогите плиз с алгоритмом проги
1. получаете указатель на начало каждого слова
2. создаете новую строку заполняя её словами в нужном порядке
0
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167
30.10.2011, 14:05  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
получаете указатель на начало каждого слова
В этом и сложность
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
30.10.2011, 14:11 #4
Если в С то можно через strtok
0
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167
30.10.2011, 14:12  [ТС] #5
Неа, нужно c++ и работать с указателями
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
30.10.2011, 14:13 #6
Валентин^_^, да какая разница? Строка же С-подобная.
strtok возвращает указатель на нужный элемент
0
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;
}
Решение "в лоб", не красиво и объемно, нужно будет код изменить
0
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167
30.10.2011, 14:51  [ТС] #8
Цитата Сообщение от YouDoItWrong Посмотреть сообщение
Решение "в лоб", не красиво и объемно, нужно будет код изменить
Спасиб, сейчас посмотрим..)

Добавлено через 16 минут
а вообще можно эту задачу решить без использования #include <vector> #include <string>? т.к. по факту мы этого еще не изучали.. хотелось бы решение с указателями и char string[]
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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/
0
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
30.10.2011, 14:58 #10
Можно конечно, если хочешь писать что то на подобие моего кода (а я не советую ), то тебе нужно будет просто написать пару функций типо: char* _substring(char *a,const int from,const int to); которая копирут подстроку из строки а и возвращает на нее указатель, нужен динамический массив для хранения слов ну как то так.
0
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167
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
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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;
}
1
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167
30.10.2011, 15:51  [ТС] #13
недостаток в том, что если количество слов нечетное - то последнее слово игнорируется.. сейчас буду смотреть, а так спасибо)
0
30.10.2011, 15:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 15:51
Привет! Вот еще темы с ответами:

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

Списки (Помогите плиз) - C++
1)Линейный упорядоченный список с удалением,нахождением и вставкой элемента. 2)Список списков(список состоит из заголовков списков) ...

Помогите студенту плиз - C++
Было дано задание-&quot;Подобрать несколько примеров тем программных продуктов&quot;. Задание корявое, в следствии- на ум ничего вообще не приходит. ...

помогите с алгоритмом! - C++
Заполните пустые ячейки пирамиды числами так, чтобы каждое число, которое содержится в прямоугольнике, равнялось сумме чисел, расположенных...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru