Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
1

Строковые потоки. Переставить местами два соседних слова

20.04.2015, 19:00. Просмотров 1946. Ответов 17
Метки нет (Все метки)

Сама программа

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
#include <stdio.h>
#include <iostream>
#include<conio.h>
#include<fstream>
#include<string>
using namespace std;
 
int main()
{
    string s1;
    string s[30];
    ifstream ifs("text.txt");
    int count=0;
    while(getline(ifs, s1, ' ')){
            s[count]=s1;
            count++;
    }
    ifs.close(); 
    string temp;
    for(int i=0;i<30;i+=2){
        temp=s[i];
        s[i]=s[i+1];
        s[i+1]=temp;
    }
    for(int i=0;i<30;i++){
        cout<<s[i]<<" ";
    }
    getch();
}


Программа меняет местами 2 соседних слова.
Как её переделать под строковые потоки. Может я плохо искал информацию, но так внятного ничего и не нашёл по данной тематике.

Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2015, 19:00
Ответы с готовыми решениями:

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

Поменять каждые два соседних слова в строке местами
прога должна менять каждые 2 сосенних слова местами) пол дня сижу не могу решить вот последняя...

Строки. В тексте поменять местами каждые два соседних слова
Есть задание: нужно считать текст и вывести его на экран, поменяв местами каждые два соседних...

Считать текст из файла и вывести его на экран, меняя местами каждые два соседних слова
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые...

17
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.04.2015, 19:24 2
Что за строковые потоки?
1
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
20.04.2015, 19:26 3
Цитата Сообщение от nmcf Посмотреть сообщение
Что за строковые потоки?
Я только одни знаю: sstream.
1
Эксперт PHP
2897 / 2472 / 1157
Регистрация: 14.05.2014
Сообщений: 6,978
Записей в блоге: 1
20.04.2015, 19:27 4
Цитата Сообщение от nmcf Посмотреть сообщение
Что за строковые потоки?
stringstream
0
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.04.2015, 19:29 5
Я просто не понял, что он имеет в виду.
1
lss
20.04.2015, 19:30
  #6

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
Я просто не понял, что он имеет в виду.
Я понял, ЧТО ты не понял.:)

0
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
20.04.2015, 21:19  [ТС] 7
Да, именно эти потоки.
0
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.04.2015, 22:01 8
Вместо файла? Или для разделения?
1
2702 / 1872 / 553
Регистрация: 05.06.2014
Сообщений: 5,423
21.04.2015, 07:19 9
Цитата Сообщение от Frip Посмотреть сообщение
Как её переделать под строковые потоки. Может я плохо искал информацию, но так внятного ничего и не нашёл по данной тематике.
Внятно ответив нафига оно там надо. Алсо, использовать while(ifs1>>s[count++]); (именно с точкой с запятой вместо {}).
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
21.04.2015, 16:09  [ТС] 10
nmcf, честно говоря, я сам не понимаю. Нам выдали задание и учебник где есть теория (очень мало, но прикреплю).
Задание: Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.
0
Миниатюры
Строковые потоки. Переставить местами два соседних слова  
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 18:18 11
Лучший ответ Сообщение было отмечено Frip как решение

Решение

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
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
 
int main()
{
    ifstream ifs("text.txt");
    if (ifs)
    {
        stringstream s;
        s << ifs.rdbuf();
        
        string word1;
        string word2;
        
        while (s >> word1)
        {
            if (s >> word2)
                cout << word2 << ' ';
            cout << word1 << ' ';
        }
        ifs.close(); 
    }
    else
        cout << "Error!" << endl;
    
    getch();
}
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
21.04.2015, 20:32  [ТС] 12
lss, спасибо! Все работает.

Хотелось бы разобраться в программе, не могли бы вы пояснить несколько строк

14) В строку s что-то заносится, как я понял, но что делать функция rdbuf() ?
16/17) Немного не ясно, как я правильно понял, это объявление переменных word1 и word2
19-24) Ну тут совсем не ясно, можете подробно объяснить?
0
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 20:50 13
Цитата Сообщение от Frip Посмотреть сообщение
14) В строку s что-то заносится, как я понял, но что делать функция rdbuf() ?
В строковый поток s (для чтения и записи) записывается (похоже на запись в файл) содержимое буфера файла, т.е. весь файл.
Цитата Сообщение от Frip Посмотреть сообщение
16/17) Немного не ясно, как я правильно понял, это объявление переменных word1 и word2
Два объекта string, куда будyт последовательно читаться по два слова из строкового потока s.
Цитата Сообщение от Frip Посмотреть сообщение
19-24) Ну тут совсем не ясно, можете подробно объяснить?
Цикл чтения, по два слова, из строкового потока (похоже на цикл чтения из файла), и вывод двух считанных слов в обратном порядке.
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
21.04.2015, 20:56  [ТС] 14
lss, т.е. в 19 строке s >> word1 переносится первое слово, а потом в 21 строке уже второе, как оно второе слово берет, игнорируя первое.

Ну и в 28 строке, я так понял, ошибка если файла нет, а сделать проверку на пустоту файла, мне кажется еще в 11 строке, но как именно - не знаю. Подскажите.
0
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 21:23 15
Цитата Сообщение от Frip Посмотреть сообщение
как оно второе слово берет, игнорируя первое.
Не понял вопроса. Что значит игнорируя? Как чтения из файла идёт? Последовательно читаются символы. Так и здесь. Оператор >> читает до первого пробельного символа. Читается первое слово, второе и т.д., пока всё из потока не прочитается.

Добавлено через 7 минут
Цитата Сообщение от Frip Посмотреть сообщение
сделать проверку на пустоту файла
Так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
     if (ifs)
    {
        stringstream s;
        s << ifs.rdbuf();
        if (s.str().empty())
        {
            cout << "File is empty!" << endl;
            getch();
            return 0;
        }
...
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
21.04.2015, 21:23  [ТС] 16
lss,

C++
1
2
3
4
5
6
while (s >> word1)
        {
            if (s >> word2)
                cout << word2 << ' ';
            cout << word1 << ' ';
        }
т.е в 1 строке он берет первое слово до пробельного символа, и там ставится своего рода метка, и уже далее (3 строка) считывается другое слово? Я правильно понял?
0
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 21:46 17
Цитата Сообщение от Frip Посмотреть сообщение
Я правильно понял?
В общем, да. Метка не ставится, просто у курсора чтения есть позиция. Открыли файл для чтения - курсор в начале файла (на первом символе). Началось чтение с помощью оператора >>, куросор начал перемещаться по символам до первого пробела (начальные пробельные символы пропустятся). Дошёл до пробела - остановился. Если опять начнётся чтенияе, то будет дальше двигаться. Тоже самое и при чтении из строкового потока. Позицию курсора, в потоке для чтения, можно узнать через метод tellg().
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
21.04.2015, 21:53  [ТС] 18
lss, Спасибо за помощь! Очень помогли
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2015, 21:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Ребят, помогите пожалуста програмку написать, мне завтра для зачета надо....я нехрена не знаю(((...

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Вот исходный код: #include &lt;fstream&gt; #include &lt;iostream&gt; //#include&lt;clocale&gt; using namespace...

Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два соседних слова.
Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два...

Обменять местами два соседних элемента списка
Кто может объяснить как это работает? Что нужно передать из стека в функцию чтобы она сработала? ...


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

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

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