1 / 1 / 2
Регистрация: 30.03.2013
Сообщений: 7
1

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

30.03.2013, 23:20. Показов 3572. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача такая:
Поменять слова в сообщении по принципу: первое с n/2+1 словом, второе с n/2+2 словом, i-тое с n/2+i словом и т.д (n-число слов в предложении). (тема: строки)

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

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

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

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

P.S: Желательно использовать только библиотеки <iostream> и <string> )))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2013, 23:20
Ответы с готовыми решениями:

Поменять местами первые слова (слова разделены пробелами) заданных строк, без использования процедур
Вводятся две строки произвольного текста. Поме-нять местами их первые слова (слова разделены...

Поменять местами слова
Имеется код, который открывает содержимое файла: #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

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

Поменять местами все слова
Строка слов (ввели с клавы или задали вручную). Поменять местами все слова. Использовать как можно...

2
328 / 327 / 92
Регистрация: 16.12.2012
Сообщений: 544
30.03.2013, 23:59 2
Лучший ответ Сообщение было отмечено al_po как решение

Решение

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;
}
1
1 / 1 / 2
Регистрация: 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;
}
1
06.04.2013, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2013, 21:16
Помогаю со студенческими работами здесь

Поменять слова в строке местами
НАПРИМЕР: ВВЕЛИ КАК ДЕЛА , А ВЫВЕЛО ДЕЛА КАК! СПАСИБО

Поменять местами слова в строке
Нужно: 1) Узнать номер первой запятой в веденном тексте - СДЕЛАНО. 2) Поменять местами первой и...

Поменять местами слова в строке C++
Поменять местами слова в строке C++ Пример:&quot;Я Вас очень прошу помогите мне пожалуйста&quot;-&quot;пожалуйста...

Поменять местами слова в тексте
В заданном тексте нужно поменять слова местами (можно полегче?)


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

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

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