Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2018, 08:12   #1
and0
 
Регистрация: 28.11.2018
Сообщений: 7
По умолчанию С++ Создать текстовый файл f, состоящий из 2-3 строк текста произвольной длины. Перезаписать содержание файла f в файл h, так, чтобы в файле h все строки были по 20 символов

Задание - Создать текстовый файл f, состоящий из 2-3 строк текста произвольной длины. Перезаписать содержание файла f в файл h, так, чтобы в файле h все строки были по 20 символов (кроме последней) и в начале каждой строки стоял ее номер.

Не получается записать массив из строки посимвольно, для переноса на новую строку, записывается по словам

Код:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
	char c[20];
	char ch;
	int i=0;
	ifstream f ("f");

	while (! f.eof()){
		f>>c;
		i++;
		cout<<c<<" ";
		if (i==20){
			cout<<'\n';
			i=0;
		}
}
}
and0 вне форума Ответить с цитированием
Старый 07.12.2018, 12:16   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

На ++ не пишу, но чисто по логике: считывать строку, определять ее длину и добавлять строку из (20-strlen) пробелов. Запрета на использование строковых функций ведь нет ?
Вопрос знатокам ++ : раэве в С++ strncpy, как в С, нет? Что-то я не нашел в описаниях.

Последний раз редактировалось digitalis; 07.12.2018 в 12:35.
digitalis вне форума Ответить с цитированием
Старый 07.12.2018, 14:02   #3
and0
 
Регистрация: 28.11.2018
Сообщений: 7
По умолчанию

Нет, запрета нет, но проблема в том что нужно как- то определить эти 20 символов
and0 вне форума Ответить с цитированием
Старый 07.12.2018, 14:10   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Вопрос знатокам ++ : раэве в С++ strncpy, как в С, нет? Что-то я не нашел в описаниях.
Та, ладно https://en.cppreference.com/w/cpp/string/byte/strncpy

Цитата:
Сообщение от and0 Посмотреть сообщение
но проблема в том что нужно как- то определить эти 20 символов
А какие с этим проблемы?

Цитата:
Сообщение от and0 Посмотреть сообщение
Не получается записать массив из строки посимвольно, для переноса на новую строку, записывается по словам
Так выводите не сразу с, а посимольно с[j]
p51x вне форума Ответить с цитированием
Старый 08.12.2018, 10:33   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Цитата:
Сообщение от and0 Посмотреть сообщение
Нет, запрета нет, но проблема в том что нужно как- то определить эти 20 символов
А че тут определять: нехватает - добавить пробелами, лишние - обрезать по самые эти самые до 20.
digitalis вне форума Ответить с цитированием
Старый 12.12.2018, 12:38   #6
and0
 
Регистрация: 28.11.2018
Сообщений: 7
По умолчанию

у меня почти получилось, но проблема с выводом "всего происходящего" не в консоль а в файл
Код:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
	char c[20];
	int i=0;
	int s=1;
	ifstream f ("f");
	string std;
	cout<<s<<" ";
	while (! f.eof()){
		f>>c[i];
		cout<<c[i];
		i++;
		if (i==20){
		cout<<"\n";
		i=0;
		s++;
		}if (i==0){
			cout<<s<<" ";
		}

}
}

Последний раз редактировалось and0; 12.12.2018 в 13:17.
and0 вне форума Ответить с цитированием
Старый 12.12.2018, 13:05   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так замените cout на ofstream какой-нибудь.
p51x вне форума Ответить с цитированием
Старый 12.12.2018, 13:18   #8
and0
 
Регистрация: 28.11.2018
Сообщений: 7
По умолчанию

все работает
спасибо
Код:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
	int i=0;
	char c[20];
	int s=1;
	ifstream f ("f");
	ofstream ff ("fp");
	string std;
	// cout<<s<<" ";
	ff<<s<<" ";
	while (! f.eof()){
		f>>c[i];
		// cout<<c[i];
		ff<<c[i];
		i++;
		if (i==20){
		// cout<<"\n";
		ff<<"\n";
		i=0;
		s++;
		}if (i==0){
			// cout<<s<<" ";
			ff<<s<<" ";
		}

}
}
но он не учитывает пробелы и нужно разделать слова символами без пробелов

Последний раз редактировалось and0; 12.12.2018 в 13:22.
and0 вне форума Ответить с цитированием
Старый 12.12.2018, 19:04   #9
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Что если вместо f>>c[i]; попробовать f.get(c[i]); Только надо будет отловить '\n'
jillitil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль(файлы). Дан текстовый файл f. Вывести все строки файла длина которых больше 30 символов. Артемdgty Помощь студентам 0 09.10.2013 00:37
Организовать текстовый файл, состоящий из N строк. Заменить в файле все маленькие латинские буквы на большие. gudok2 Паскаль, Turbo Pascal, PascalABC.NET 8 19.05.2013 11:52
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запраш Richik123 Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2012 16:28
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запра Richik123 Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2012 17:32