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

Поменять слова местами - C++

Восстановить пароль Регистрация
 
al_po
1 / 1 / 0
Регистрация: 30.03.2013
Сообщений: 7
30.03.2013, 23:20     Поменять слова местами #1
Задача такая:
Поменять слова в сообщении по принципу: первое с n/2+1 словом, второе с n/2+2 словом, i-тое с n/2+i словом и т.д (n-число слов в предложении). (тема: строки)

Алгоритм по сути простой но у меня возникли трудности с его реализацией.
Вот как я его себе представляю:

Нужно в цикле из строки сделать массив слов:
1. Найти первое вхождение пробела и запомнить его позицию.
2. Далее выделить подстроку с позиции начала строки, содержащею "позиция пробела-позиция начала строки(изначально=0) символов".
3. Данную подстроку присваиваем первому элементу массива mas[1](к примеру). (на этом этапе у меня косяки((()
4. И далее присвоить позицию начала строки [позицию пробела+1].
5. И всё заново пока строка не кончится.

Ну и пометь позиции слов по принципу.

Пожалуйста помогите с реализацией!!!

P.S: Желательно использовать только библиотеки <iostream> и <string> )))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2013, 23:20     Поменять слова местами
Посмотрите здесь:

поменять соседние слова местами C++
C++ [C++] Поменять местами все слова
Поменять местами первые слова (слова разделены пробелами) заданных строк, без использования процедур C++
C++ Поменять местами слова в строке C++
C++ Строки. Поменять местами слова
C++ Поменять местами слова в файле
C++ Поменять местами слова в строке
C++ Поменять местами слова в предложении

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
30.03.2013, 23:59     Поменять слова местами #2
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
#include <string>
 
std::vector<std::string> split(const std::string& s) { // программа выделяет из строки слова и добавляет их в вектор
    std::vector<std::string> vec;
    typedef std::string::size_type str_size;
    str_size i = 0;
    int count = 0;
    while (i != s.size()) {
        while (isspace(s[i]) && i != s.size())
            ++i;
        str_size j = i;
        while (!isspace(s[j]) && j != s.size())
            ++j;
        if (i != j) {
            vec.push_back(s.substr(i, j - i));
            i = j;
        }
    }
    return vec;
}
 
 
void swap(std::string& s1, std::string& s2) {
    std::string buf = s1;
    s1 = s2;
    s2 = buf;
}
 
int main()
{
    setlocale(0, "");
    std::string str, newstr;
    str = "Shut up you know you are my only";
    std::vector<std::string> vec = split(str);
 
    for (size_t i = 0; i != vec.size()/2; ++i) {
        if (vec.size() % 2 == 0)
            swap(vec[i], vec[i + vec.size()/2]);
        else swap(vec[i], vec[i + vec.size()/2 + 1]);
    }
 
    for (size_t i = 0; i != vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
 
    system("PAUSE");
    return 0;
}
al_po
1 / 1 / 0
Регистрация: 30.03.2013
Сообщений: 7
06.04.2013, 21:16  [ТС]     Поменять слова местами #3
Вот так еще можно)))
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 <string>
#include <iostream>
using namespace std;
 
int main(){
        string str;
        cout << "Enter string: ";
        getline(cin,str);
        str+=' ';
        string mas[10];
        string::size_type k=0,pos=0;
        k=str.find(" ",pos);
        int in = 0;
        while(k != string::npos ) {
            string sl = str.substr(pos, k - pos);
            mas[in] = sl;
            pos = k + 1;
            k=str.find(" ",pos);
            in++;
        }
 
        for(int i = 0;i < in ;i++){
            if(in/2 + i < in){
            string t = mas[i];
            mas[i] = mas[in/2 + i];
            mas[in/2 + i] = t;
            }
 
        }
        for(int i = 0;i < 10;++i)
            cout << mas[i] << " "<<endl;
 
        return 0;
}
Yandex
Объявления
06.04.2013, 21:16     Поменять слова местами
Ответ Создать тему
Опции темы

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