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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 69, средняя оценка - 4.91
александрз
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 35
#1

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

24.04.2012, 19:22. Просмотров 8645. Ответов 13
Метки нет (Все метки)

Появилась проблема.
Строка из файла считывается, но не реагирует на пробелы.
И не находит конец строки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
#include<iostream>
using namespace std;
int main(){
char s[1000];
ifstream fin ("part2num.txt");
fin>>s[0];
int j = 1;
while (s[j]!='\0'){
 
fin>>s[j];
cout<<s[j];
j++;
}
system("pause");
}
Кто нибудь может помочь?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 19:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание строки из файла. (C++):

Считывание строки с файла - C++
Подскажите как сделать так чтобы с файла считывало не одну строку а все! #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Считывание строки из файла - C++
Пишу что-то типа простой авторизации на c++, нужно взять из файла определенную строку ( там пароли хранятся ) и сравнить с введенной. Как...

Считывание строки из файла - C++
Здравствуйте Проблема такая: во время считывания строки из файла выносит из проги ifstream fin(&quot;in.txt&quot;); string word(&quot;&quot;); while...

Считывание строки из файла - C++
Здравствуйте. Есть такой класс (это упрощенный тестовый класс): class test_string { std::string s; public: test_string(const...

Считывание строки из файла - C++
Доброго времени суток! В программе необходима реализация ввода строки из файла и дальнейшая работа с ней. Используются GTESTS. Также...

Считывание строки из файла - C++
Что то не врублю, как считать полностью всё содержимое файла и занести его в строку. НАпример если там будет такое: ф ыы ввв а...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
extenup
54 / 54 / 3
Регистрация: 12.11.2011
Сообщений: 109
24.04.2012, 19:33 #2
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>
using namespace std;
 
int main()
{
    string str;
 
    ifstream fin("part2num.txt");
    while(!fin.eof()) str += fin.get();
    fin.close();
 
    cout << str << endl << endl;
 
    system("pause");
    return 0;
}
0
александрз
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 35
24.04.2012, 20:43  [ТС] #3
Он строкой считывает всю что в файле, а как это разделить на массив строк?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.04.2012, 22:52 #4
Цитата Сообщение от александрз Посмотреть сообщение
Он строкой считывает всю что в файле, а как это разделить на массив строк?
Можно так (примерно, не компилировал):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <string>
 
 
using namespace std;
 
 
int main() {
    vector<string> text(
       (istream_iterator<string>(ifstream("part2num.txt"))),
        istream_iterator<string>()
    );
    copy(text.begin(), text.end(), ostream_iterator(cout, " "));
}
Получится вектор из строк. С ним можно работать так же, как с массивом.
0
new27
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 7
14.11.2012, 17:02 #5
А можно как-то преобразовать полученную строку в массив символов?

Добавлено через 6 минут
Ой, так все же просто оказалось: обращаемся поэлементно к символам как к элементам массива (str[i])
у меня получилось.
Если вам надо разбить на строки, то знайте, что "\0" это символ перехода на новую строку

Добавлено через 12 минут
Нет, у меня не получилось, потому что непонятно какой предел в цикле устанавливать. При вызове функции strlen выводится ошибка
error C2664: 'strlen' : cannot convert parameter 1 from 'std::string' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Что делать?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
14.11.2012, 17:42 #6
Цитата Сообщение от new27 Посмотреть сообщение
знайте, что "\0" это символ перехода на новую строку
Нет, это не он.
Цитата Сообщение от new27 Посмотреть сообщение
При вызове функции strlen выводится ошибка
error C2664: 'strlen' : cannot convert parameter 1 from 'std::string' to 'const char *'
Вместо
C++
1
strlen(arg)   // для char const*
пиши
C++
1
arg.length()   // для std::string
Добавлено через 7 минут
Цитата Сообщение от new27 Посмотреть сообщение
А можно как-то преобразовать полученную строку в массив символов?
Примерно так:
C++
1
2
3
4
char * buffer = new char[str.length()];
std::memcpy(buffer, str.c_str(), str.length());
// ...
delete[] buffer;
0
new27
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 7
14.11.2012, 18:51 #7
gray_fox, Честно говоря, я классы еще не знаю и вообще не очень хорошо пишу. Мне надо было написать программу которая копирует содержимое файла, удаляя в каждой строке слово под номером n. Используя пример из этой темы я кое-что состряпала. И оно даже немного работало пока в консоле не начала появляться ошибка "string subscript out of range"
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

int main()
{
string str;
int i,j,n,m;
i=0;
ifstream fin("text.txt");
while(!fin.eof())
str+= fin.get();

fin.close();

cout << str << endl << endl;

cout << "введите n" << endl;
cin >> n;
i=str.length();
m=1;
for (j=0; j<i;j++){
if (m!=n)
cout << str[j];
if (str[i]==' ') m++; // т. е. я ищу это слово под номером n по количеству пройденных пробелов и вывожу на экран только все остальные слова. в этом заключается удаление
if (str[i]=='/0') m=1;

}

system("pause");
return 0;
}
0
zhurbikk
4 / 4 / 0
Регистрация: 14.11.2012
Сообщений: 38
14.11.2012, 18:55 #8
по моему проще будет использовать getline
while (!fin.eof())
{
fin.getline(s,1000,'\n');
}
и оно построчно с пробелами считает файл
а там если нужно сохранить эти строки можно сделать массив строк и точно также считать
0
new27
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 7
14.11.2012, 19:11 #9
zhurbikk, error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize,_Elem)' : cannot convert parameter 1 from 'std::string' to 'char *'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
0
zhurbikk
4 / 4 / 0
Регистрация: 14.11.2012
Сообщений: 38
14.11.2012, 20:04 #10
Скинь код и скажи что нужно

Добавлено через 16 минут
Скинь код и скажи что делать
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
14.11.2012, 20:09 #11
Цитата Сообщение от zhurbikk Посмотреть сообщение
fin.getline(s,1000,'\n');
C++
1
getline(fin, s);
0
new27
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 7
14.11.2012, 20:13 #12
zhurbikk, в сообщении номер 7 написала вроде как
0
zhurbikk
4 / 4 / 0
Регистрация: 14.11.2012
Сообщений: 38
14.11.2012, 20:45 #13
как то так
у меня работает


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
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
string str;
int i,j,n,m;
i=0;
ifstream fin("text.txt");
if (!fin)
{
            cout<<"Error";
            return -1;
}
cout << "введите n" << endl;
cin >> n;
while(!fin.eof())
{
 
getline(fin,str);
 
 
 
//cout << str << endl << endl;
 
 
i=str.length();
m=1;
for (j=0; j<i;j++){
if (m!=n)
cout << str[j];
if (str[j]==' ') m++; // т. е. я ищу это слово под номером n по количеству пройденных пробелов и вывожу на экран только все остальные слова. в этом заключается удаление
if (str[j]=='/0') m=1;
 
}
cout<<endl;
}
system("pause");
return 0;
}
0
new27
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 7
14.11.2012, 21:11 #14
zhurbikk, У меня тоже работает. Спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 21:11
Привет! Вот еще темы с ответами:

считывание строки из файла - C++
Помогите,пожалуйста,с программой. Необходимо считать из файла строку,удалить из неё предложение в скобках(включая скобки) и записать...

Считывание строки с текстового файла - C++
Напишите пожалуйстанаброски как можно считать строку с текстового файла ,для дальнейшей работы с ней.Используя string.h Спасибо

Считывание из файла до конца строки - C++
Нужно написать программу, которая создаёт файл, каждая строка которого содержит буквы и цифры. В каждой строке определить наибольшую...

Считывание из файла по номеру строки - C++
Есть задача получить Event по номеру, из txt файла, то есть выводится такое сообщение: void UpdateFile() { std::cout &lt;&lt; &quot;Вывод всех...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.11.2012, 21:11
Ответ Создать тему
Опции темы

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