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

Текст из TXT файла в строку - C++

Восстановить пароль Регистрация
 
homme
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
17.10.2013, 16:45     Текст из TXT файла в строку #1
Добрый день.

С++ начал учить два дня назад, поэтому прошу не пинать за глупые вопросы.

Ситуация следующая:
есть строка S (типа char или string, пока не разобрался в чем конкретная разница)
есть файл input.txt.
В input.txt введен текст (для простоты возьмем что текст находится в одной строке).
Задача: нужно текст из файла input.txt присвоить строке S, чтобы с ним можно было полноценно работать в строке S (конкретно нужно будет).

Предполагаю, что нужно работать с функцией ifstream. Но не могу разобраться с ее работой.
Хотя с функцией ofstream разобрался.

Вопрос в следующем: как реализовать выше описанную ситуацию?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 16:45     Текст из TXT файла в строку
Посмотрите здесь:

C++ отладить программу на языке С++, которая считывает из файла a.txt строку и записывает её в файл b.txt в обратном порядке
Текст из файла переводить в строку C++
C++ Считать строку из txt-файла Unicode и преобразовать ее в число - это реально?
C++ Переписать данные файла input.txt в output.txt, отсортировав их
C++ Как удалить строку из структурированного .txt файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
17.10.2013, 16:58     Текст из TXT файла в строку #2
homme, ну было же на форуме(

Считывание строки из файла.

вот например. Попробуйте разобраться. Вопрос то очень распространенный, уже много раз решался
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
17.10.2013, 17:43     Текст из TXT файла в строку #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    std::ifstream ifs("input.txt"); // создаем объект для считывания данных с файла
    if (!ifs)                       // если создать не удалось
    {
        std::cout << "Файл не найден\n"; // выводим сообщение об ошибке
        return 1;                        // завершаем программу с кодом ошибки
    }
    std::string S;
    std::getline(ifs, S); // считываем строку из файла
    std::cout << S << std::endl; // выводим результат на экран
}
homme
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
17.10.2013, 18:31  [ТС]     Текст из TXT файла в строку #4
Folko, MrGluck, спасибо!
MrGluck, прошу прощения за глупый вопрос, а зачем используется std:: ?

Была поставлена задача удалить последнюю букву каждого слова в строке. Данные в строку заносились из текстового файла.
Ниже прикладываю код программы, который у меня получился.
Программа работает, но не удаляет САМЫЙ последний символ (str[dl]), где dl - длина строки, если же этот символ является буквой. Если является точкой, запятой и т.д. - все нормально, символ стоящий перед ним удаляется (последняя буква в слове).

Собственно, теперь задача как-то удалить этот символ (в предположении что строка заканчивается им).
Пробовал сделать это следующей строкой:
C++
1
2
dl=str.length(); // узнаем новую длину строки
if (!(str[dl]==' ') || !(str[dl]=='.') ||  !(str[dl]==',') ||  !(str[dl]=='!') ||  !(str[dl]=='?') ||  !(str[dl]=='/') || !(str[dl]=='\n')) str.erase(dl-1,1);
Но программа не сделала ничего.

Как это можно сделать?
Спасибо.



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
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
 
using namespace std;
 
int main()
{
string str;
int dl,dl1,i;
ifstream vvod("input.txt");
while (!vvod.eof()) str+=vvod.get();
vvod.close();
cout << "V faile input.txt nahoditsya text: \n" << str << endl;
dl=str.length();
cout << "Dlina stroki: " << dl << endl;
for (i=0;i<dl;++i)
{
    if ((str[i]==' ') || (str[i]=='.') ||  (str[i]==',') ||  (str[i]=='!') ||  (str[i]=='?') ||  (str[i]=='/')) str.erase(i-1,1);
}
cout << "Stroka s udalennimu bukvami = " << str << endl;
dl1=str.length();
cout << "Dlina stroki s udalennimi bukvami = " << dl1 << endl;
return 0;
}
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
17.10.2013, 19:31     Текст из TXT файла в строку #5
homme, спасибо можно выразить кнопкой под сообщением) по поводу удаления последнего символа:

length возвращает длину строки. То есть 'slovo' будет длиной 5 символов, но последний символ будет иметь индекс не 5, а 4 (ведь начинаем нумерацию с нуля). Поэтому вам надо писать не (str[dl]==' '), а (str[dl-1]==' ')
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
17.10.2013, 19:48     Текст из TXT файла в строку #6
Цитата Сообщение от homme Посмотреть сообщение
а зачем используется std::
Я указываю пространство имен std явно вместо того, чтобы пихать в него все функции (using namespace std)

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    std::ifstream ifs("input.txt"); // создаем объект для считывания данных с файла
    if (!ifs)                       // если создать не удалось
    {
        std::cout << "Файл не найден\n"; // выводим сообщение об ошибке
        return 1;                        // завершаем программу с кодом ошибки
    }
    std::string S;
    std::getline(ifs, S); // считываем строку из файла
    std::cout << "Before: " << S << std::endl; // выводим результат на экран
    S.resize(S.length() - 1);
    std::cout << "After: " << S << std::endl; // выводим результат на экран
}
Добавлено через 16 секунд
Если надо удалить лишь определенный, то добавить условие if
homme
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
18.10.2013, 00:05  [ТС]     Текст из TXT файла в строку #7
Folko, методом тыка выяснил, что нужно было работать с символом str[dl-2].
Почему dl-2 - не ясно, но факт остается фактом
Выводил элемент str[dl] - на экране пусто, str[dl-1] - на экране пусто, str[dl-2] - появилась последняя буква в строке.
Теперь вроде все работает.

Всем спасибо за помощь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 08:17     Текст из TXT файла в строку
Еще ссылки по теме:

Исправить программу, чтоб считывала текст из файла Input.txt и выводит в файл Output.txt C++
C++ Из внешнего файла в формате txt ввести текст. Подсчитать частоту встречающихся в тексте символов
Cчитать из файла весь текст в строку string C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 08:17     Текст из TXT файла в строку #8
Цитата Сообщение от homme Посмотреть сообщение
Почему dl-2 - не ясно, но факт остается фактом
Нужно знать, как строка записана в файле. Может в конце строки - пробел или символ новой строки ('\n'). Поэтому
Цитата Сообщение от homme Посмотреть сообщение
str[dl-1] - на экране пусто
Пусто тоже может быть символом - пробельным.
Yandex
Объявления
18.10.2013, 08:17     Текст из TXT файла в строку
Ответ Создать тему
Опции темы

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