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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
#1

Ввод строки, содержащей несколько слов. - C++

20.12.2011, 00:09. Просмотров 1304. Ответов 9
Метки нет (Все метки)

Здравствуйте, необходимо ввести строку, содержащую несколько слов из файла. Вот мой вариант:
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
#include "stdafx.h"
#include "conio.h"
#include "string"
#include "iostream"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    struct slovo
    {
        string sl;
    };
    slovo mas[20];
    int i=0;
    string a,b,c;
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    do 
    {
        cin>>mas[i].sl;
        i++;
    } while(cin>>mas[i].sl);
    a="";
    for(int k=0;k<i;k++) a=a+mas[k].sl;
    cout<<a;
    return 0;
}
Исходный файл содержит строку: Hello, world! Let it snow!
Выходной файл: Hello,Letsnow!

Как видно, слова "world!" и "it" исчезли. Что не так?

Добавлено через 12 минут
Строки я склеиваю специально: a=a+mas[k].sl
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2011, 00:09     Ввод строки, содержащей несколько слов.
Посмотрите здесь:
В строке, содержащей несколько слов, разделенных пробелом, переставить слова в обратной последовательности C++
Не вводятся строки содержащие несколько слов C++
C++ Ввод/вывод строки с подсчетом количества слов
C++ В двумерном массиве целых чисел добавить строки после строки, содержащей простое число
C++ В динамической матрице целых чисел добавить строки после строки, содержащей простое число
C++ Функция, получает строку слов и рзделителей, а на выходе имеет массив слов из строки и количество этих слов
Вычислить значение величины,содержащей несколько однотипных сум. Для вычисления сумм написать функцию пользователя C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.12.2011, 00:12     Ввод строки, содержащей несколько слов. #2
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Что не так?
все...начиная с того что намешан Си и С++ и заканчивая неправильными настройками опций проекта
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
20.12.2011, 00:13     Ввод строки, содержащей несколько слов. #3
BoBaH26, http://www.cplusplus.com/reference/string/getline/
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.12.2011, 00:23  [ТС]     Ввод строки, содержащей несколько слов. #4
easybudda, спасибо, посмотрю, но хотелось бы мой способ понять, как сделать условие, в зависимости от выполнения которого будет выполняться или не выполняться мой цикл.
Jupiter, а что собственно намешано? Просто я недавно С++ изучать начал. Можешь написать, что относится к С, а что к С++?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.12.2011, 00:31     Ввод строки, содержащей несколько слов. #5
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
#include "stdafx.h" //при создании проекта нужно ставить галку "Пустой проект"
#include "conio.h" //эта приблуда и ни Си и не С++, а черт знает что
#include "string" //стандартные хедеры подключают так:  #include <string>
#include "iostream" //аналогично #include <iostream>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[]) //здесь эти аргументы main не нужны
{
    struct slovo
        {
                string sl; // string - это С++
        };
        slovo mas[20];
    int i = 0;
    string a,b,c;
//    freopen("input.txt","r",stdin);  - это функция Си
//    freopen("output.txt","w",stdout); - аналогично
        do 
        {
                cin>>mas[i].sl; //а тут уже используешь С++
                i++;
        } while(cin>>mas[i].sl);
        a="";
        for(int k=0;k<i;k++) a=a+mas[k].sl; //цикл в стиле С++
        cout<<a;//тоже С++
        return 0;
}
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.12.2011, 00:38  [ТС]     Ввод строки, содержащей несколько слов. #6
Спасибо. Все-таки С++ больше, чем С. А пишу в Microsoft Visual Studio 2010, отсюда и лишние аргументы в main(). #include "stdafx.h" - стандартна, пишется сама при создании нового проекта.
#include "conio.h" - позволяет использовать _getch(), чтобы ждать нажатия клавиши. Согласен, вместо нее лучше использовать endl. Пишу "" вместо <>, т.к. учили так, но знаю, что оба рабочие. Кроме freopen("input.txt","r",stdin); еще не знаю, как по-другому открывать поток для считывания и записи в файл.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.12.2011, 00:45     Ввод строки, содержащей несколько слов. #7
Цитата Сообщение от BoBaH26 Посмотреть сообщение
#include "stdafx.h" - стандартна, пишется сама при создании нового проекта.
вы не правильно создаете проект, надо ставить галочку пустой проект

Цитата Сообщение от BoBaH26 Посмотреть сообщение
#include "conio.h" - позволяет использовать _getch()
вместо этого используй
C++
1
2
#include <cstdio>
std::getchar();
или
C++
1
2
#include <iostream>
std::cin.get();
или
C++
1
2
#include <cstdlib>
std::system("pause");
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Пишу "" вместо <>, т.к. учили так, но знаю, что оба рабочие.
вас неправильно учили, "" - используют для собственных хедер файлов - которые написали вы/ваш брат, сват.../одногрупник, <> - используют для стандратных хедер файлов, которые вы найдете везде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//построчно читает текст файла, выводит его на экран и записывает в файл
#include <string>
#include <fstream>
#include <iostream>
 
int main()
{
    std::string str;
    std::ifstream in("input.txt");
    std::ofstream out("output.txt");
    
    while (std::getline(in, str))
    {
        out << str;
        std::cout << str;
    }
 
    std::cin.get();
}
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.12.2011, 01:17  [ТС]     Ввод строки, содержащей несколько слов. #8
А какая функция есть в С++ для нахождения символа в строке? Строка задается как string, а не как char <name>[<kol-vo>]. Например, надо найти в строке b="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; i-й символ строки a. Делаю так:
Код C++
1
b.find(a.at(i))
Но работает неправильно.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.12.2011, 01:21     Ввод строки, содержащей несколько слов. #9
Цитата Сообщение от BoBaH26 Посмотреть сообщение
неправильно.
неправильно в вашем понимании это как?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2011, 01:52     Ввод строки, содержащей несколько слов.
Еще ссылки по теме:
Ввод слов в массив и подсчёт введённых слов C++
C++ Массив символов (Подсчитать количество слов в строке, при условии, что в качестве разделителя слов используется один или несколько пробелов)
Как узнать длину строки, содержащей кириллицу? C++
C++ Найти номера строки не содержащей едениц в матрице
C++ Определить номер строки, содержащей наибольший элемент матрицы

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

Или воспользуйтесь поиском по форуму:
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.12.2011, 01:52  [ТС]     Ввод строки, содержащей несколько слов. #10
Ну вот в этом цикле:
C++
1
2
3
4
5
6
7
for (int k=0;k<a.length();k++) 
    {
        if (b.find(a.at(k)))
            kolb++;
        if (c.find(a.at(k)))
            kolm++;
    }
kolb = 29, kolm = 30 в итоге.

Добавлено через 2 минуты
Строка а: Hello,world!Letitsnow!NewYear!
kolb - кол-во больших, kolm - кол-во маленьких.
b="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
c="abcdefghijklmnopqrstuvwxyz";

Добавлено через 25 минут
Ну так что делать?
Yandex
Объявления
20.12.2011, 01:52     Ввод строки, содержащей несколько слов.
Ответ Создать тему
Опции темы

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