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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 11:58   #1
tutty123
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
Печаль Редактирование файла

Используя функцию вывода меню для группы строк, заданной массивом указателей, реализовать функции редактирования файла.
Для вывода на экран редактируемого текста использовать функцию с массивом указателей на строки редактируемого текста, для создания меню программы -статический массив указателей на строки меню.
Строки редактируемого текста разместить в динамической памяти. В программе предусмотреть меню основных операций, в которое включить
просмотр текста, добавление строки к тексту и Функция получает массив указателей на строки и возвращает строку в динамической памяти, содержащий объединенный текст их входных строк.

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

Вот исходник, просьба помочь...


Код:
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;

FILE *file; 
char **TEXT = NULL;			
int	kolStrok=0;					
char *FileName = "temp.txt";	

void Write() 
{
	int	i;
	if (kolStrok)					
	{
		file = fopen(FileName, "w");
		if(!file)				
			printf("fail '%s' ne sozdan\n", FileName);
		else
		{
			for (i=0; i<kolStrok; i++)	
				fputs(TEXT[i], file);	
			fclose(file);					
		}
	}
	else
		printf("Net dannyh\n");		
}


void Free(void)
{
	int	i;
	if (kolStrok)									
{
		for (i=0; i<kolStrok; i++) free(TEXT[i]);			
		free(TEXT);								
TEXT = NULL;						 
		kolStrok = 0;
	}
}

void Read(void)
{
	file = fopen(FileName, "r");	
	if(!file)								
		printf("file '%s' ne nayden\n", FileName);
	else
	{
		Free();									do
		{
			TEXT = (char**)realloc(TEXT, (kolStrok+1)*sizeof(char*));
			
			TEXT[kolStrok] = (char*)malloc(256);
		}while(fgets(TEXT[kolStrok++],256,file)); 
		free(TEXT[--kolStrok]);	
		if (0==kolStrok)				
		{
			free(TEXT);			
			TEXT = NULL;			
		}
		fclose(file);				
		printf("file '%s' prochitan\n",FileName);
	}
}

void Print(void)
{
	int	i;
	if (kolStrok)						
	{
		for (i=0; i<kolStrok; i++)
		printf("%s",TEXT[i]);	
		printf("\n");								
	}
	else
		printf("Net dannyh");
}

void Add(void)
{
	int	len;

	TEXT = (char**)realloc(TEXT, (kolStrok+1)*sizeof(char*));
	TEXT[kolStrok] = (char*)malloc(256);		
	printf("Vvvedite novuju stroku: ");	
	gets(TEXT[kolStrok]);							 
	len = strlen(TEXT[kolStrok]);				
	TEXT[kolStrok][len] = ' ';					
	TEXT[kolStrok][len+1] = 0;					
	kolStrok++;	
	printf("");		
}

char zad(char **TEXT)
{	
	char **TEXT2=NULL;
	TEXT2=(char**)realloc(TEXT, (kolStrok+1)*sizeof(char*));
	TEXT[kolStrok] = (char*)malloc(256);
int k=0;
file = fopen(FileName, "r");
long Len = 0;
fseek(file,0,SEEK_END);
Len = ftell(file);
fseek(file,0,SEEK_SET);
fclose (file);
for(int i=0;i<Len;i++){
if (*TEXT[i]!=' ') TEXT2[k]=TEXT[i];k++;}
printf("preobrazovanie zaverheno");
return **TEXT2;
}

int main()
{
	const int maxMenu = 6;		
	char *pMenu[maxMenu] =	
	{
		"1. Zagruzit file\n",
		"2. Save file\n",
		"3. Vyvesti na ekran\n",
		"4. Dobavit stroku\n",
		"5. Variant 8\n",
		"6. EXIT\n"
	};
	int	i;
	char	ch;
	BOOL	flag_p = TRUE;		
	while (flag_p)				
	{
		for (i=0; i<maxMenu; i++) printf("%s",pMenu[i]);	
		printf("Vash vybor: ");		
		do
		{ 
			ch = getch();				
			switch (ch)					
			{
				case '1':				
					printf("%c\n",ch);
					Read();
					break;
				case '2':				
					printf("%c\n",ch);
					Write();
					break;
				case '3':				
					printf("%c\n",ch);
					Print();
					break;
				case '4':				
					printf("%c\n",ch);
					Add();
					break;
				case '5':				
					printf("%c\n",ch);
					zad(TEXT);
					break;
				case '6':				
					printf("%c\n",ch); 
					flag_p = FALSE
					break;
				default:
					continue;			
			}
			ch = 0x7f;					
		} while (0x7f != ch);		
	}
	return 0;
}
tutty123 вне форума Ответить с цитированием
Старый 02.05.2012, 15:00   #2
tutty123
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

что, никто не знает?
tutty123 вне форума Ответить с цитированием
Старый 02.05.2012, 15:19   #3
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Не получается сделать функцию, которая получает массив указателей на строки и возвращает строку в динамической памяти, содержащий объединенный текст их входных строк.
Так задача просто в лоб решается.
В цикле пробегаемся по массиву указателей из строк, выясняя через strlen длину каждой. Суммируем.
Создаем итоговую строку равную сумме длин + 1.
И второй раз в цикле заносим через strcat в эту объединенную строку.
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 15:20   #4
tutty123
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Так задача просто в лоб решается.
В цикле пробегаемся по массиву указателей из строк, выясняя через strlen длину каждой. Суммируем.
Создаем итоговую строку равную сумме длин + 1.
И второй раз в цикле заносим через strcat в эту объединенную строку.
а можно пример?
tutty123 вне форума Ответить с цитированием
Старый 02.05.2012, 15:37   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Пример:
Код:
char* func(char** pp, size_t n)
{
	int t = 0;
	for (size_t i = n; i--;)
		t += strlen(pp[i]);
	char* c = new char[t + 1];
	c[0] = 0;
	for (size_t i = 0; i < n; i++)
		strcat(c,pp[i]);
	return c;
}
Код:
int main()
{
	const N = 5; // есть пять указателей на строки 
	char** pp = new char* [N];
	for (int i = 0; i <5; i++)
	{
		pp[i] = new char[10];
		sprintf(pp[i], "qwerty%d ", i);
	}
	char* f = func(pp, N);
	printf(f);

	// TODO: сделать очистку
}
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 15:39   #6
tutty123
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

так а почему именно 5 указателей, если мы не знаем количество строк в файле?
tutty123 вне форума Ответить с цитированием
Старый 02.05.2012, 15:49   #7
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
функцию, которая получает массив указателей на строки....
Я привел пример этой функции.
Мельком глянув Ваш код, вижу, что количество строк Вам известно.
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 15:50   #8
tutty123
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

Все равно пробелы не удаляет

При возвращении строки f она почему то равна 0

А где в вашем условии удаление пробелов?

Последний раз редактировалось Stilet; 02.05.2012 в 17:51.
tutty123 вне форума Ответить с цитированием
Старый 02.05.2012, 17:04   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Все равно пробелы не удаляет

Ни в моем примере, ни во всех ваших постах до этого, ни о каких пробелах и речи не велость. Есть массив указателей на строки. Его длина Вам известна.
Каждый элемент этого массива должен содержать указатель на строку.
под строкой понимается массив типа char содержащий байтовые значения из таблицы символов, последний элемент массива - \0
Вам нужно было объединить строки из массива. Пример был дан.
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 17:07   #10
tutty123
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

тоесть в моем задании нужно просто из двумерного массива все перегнать в одномерный??? если так то я просто не так понял задание.
tutty123 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование текстового файла Pahanuch C# (си шарп) 1 14.02.2012 16:32
Редактирование текстового файла. Silverstone Помощь студентам 1 16.12.2011 04:37
C# редактирование текстового файла dluhhbiu Помощь студентам 1 03.09.2011 17:45
Чтение и редактирование файла Claster Помощь студентам 3 02.03.2011 18:40
Редактирование файла Лубышев Помощь студентам 4 04.03.2009 12:18