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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2010, 15:08   #1
Expelio
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 11
По умолчанию Работа с файлами в C++

Задача.
Случайным образом создать таблицу пар символьных значений и записать её в текстовый файл в виде:
X Y
a m (ну т.е. буква - буква)
t 9 (буква - цифра)
5 8 (цифра - цифра)
! 7 (знак - цифра)
u * (буква - знак)
Считать из файла пары значений и поместить в другой текстовый файл те из них, где X и Y являются буквами латинского алфавита или цифрами:
X Y
a m
5 8



Написал лишь часть программы, которая генерирует рандомные символы в матрице с двумя столбцами.

Не знаю как дальше:
необходимо еще проверить теперь каждую строку матрицы на буквы/цифры/символ после чего чего при встрече в строке пары буква-буква ( и другие написанные выше) записывались в текстовый файл.


PLZ HELP!! =)

Код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iomanip>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{const int COL=2;
int i,j;
   const int ROW=10;
   char matr[ROW][COL];		
   const int s=7;
   char ch1;
   char ch2;
   char ntable[s] = "ab12!*";
   time_t t;
   srand(time(&t));
   srand (unsigned (time (NULL)));

   for (i=0; i<ROW; i++)              		
        { for (j=0; j<COL; j++)        		
            { matr[i][j]=ntable[rand()%(s-1)]; 
               cout << setw(6) << matr[i][j];
            }
      cout << endl;
  }


 
	return 0;
}

Последний раз редактировалось Stilet; 24.03.2010 в 15:36.
Expelio вне форума Ответить с цитированием
Старый 24.03.2010, 16:01   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Теперь записываешь в файл
Код:
FILE *file;
fopen(file, "file.txt");
for (int i=0; i<Row; i++)
  for(int l=0; l<Col; l++)
    fprintf("%c %c", matr[i][l]);
Как то так. код не проверял.
Потом считываешь аналогичным образом в массив и проверяешь на принадлежность к символам или цифрам.
psycho-coder вне форума Ответить с цитированием
Старый 24.03.2010, 16:29   #3
Expelio
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 11
По умолчанию

после вставки кода этого выдает ошибки:

error C2664: fopen: невозможно преобразовать параметр 1 из 'FILE *' в 'const char *'


error C2664: fprintf: невозможно преобразовать параметр 1 из 'const char [6]' в 'FILE *'
Expelio вне форума Ответить с цитированием
Старый 24.03.2010, 19:38   #4
Яр|/||< (^_^)
LosYear
Форумчанин
 
Аватар для Яр|/||< (^_^)
 
Регистрация: 19.06.2009
Сообщений: 695
По умолчанию

Надо в сделать вот так:
Код:
FILE* output=fopen("output.txt","w");
for (int i=0; i<Row; i++){
  for(int j=0; l<Col; j++)
    fprintf(output,"%c %c", matr[i][j]);}}
2psycho-coder
вы говорите fprintf и что теперь джае если в коде всего один файл с++, всё равно надо указать куда печатать. И в верхней строке ошибка. А так цикл написан правильно

Последний раз редактировалось Яр|/||< (^_^); 24.03.2010 в 19:43.
Яр|/||< (^_^) вне форума Ответить с цитированием
Старый 24.03.2010, 23:20   #5
Expelio
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 11
По умолчанию

спасибо, можно вопрос, а где этот файл создается, в каком каталоге ?))
Expelio вне форума Ответить с цитированием
Старый 24.03.2010, 23:38   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

в том же где и твоя программа
NiCola999 вне форума Ответить с цитированием
Старый 25.03.2010, 00:11   #7
Expelio
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 11
По умолчанию

спасибо нашел ))
возникла следующая проблема

в файле вместо сгенерированных символов появляется абракадабра вместо них. если же в диапазоне char ntable[s] = "ab12!*"; вместо 6 символов сделать меньше, то в файле становится все нормально, но при этом в консоли и в файле появляются пробелы, не нужные мне по задаче (
что делать ?

и вопрос еще такой:
как образом сделать так, чтобы в файле они выводились не в строчку, а также парами в два столбца ?
Expelio вне форума Ответить с цитированием
Старый 25.03.2010, 00:41   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
как образом сделать так, чтобы в файле они выводились не в строчку, а также парами в два столбца ?
Код:
FILE* output=fopen("output.txt","w");
for (int i=0; i<Row; i++){
  for(int j=0; l<Col; j++)
    fprintf(output,"%c %c", matr[i][j]);
  fprintf(output, "%c" ,'\n');
}

Последний раз редактировалось NiCola999; 25.03.2010 в 00:52.
NiCola999 вне форума Ответить с цитированием
Старый 25.03.2010, 18:34   #9
Expelio
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 11
По умолчанию

спасибо, теперь такой вопрос:
мне в файл сохраняется полностью вся матрицы, мне же необходимо записать в файл только строки матрицы удовлетворяющие условиям:
1 столбец | 2 столбец
буква буква
буква цифра
цифра цифра
знак цифра
буква знак
Expelio вне форума Ответить с цитированием
Старый 26.03.2010, 19:07   #10
Expelio
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 11
По умолчанию

ОЧЕНЬ ПРОШУ ПОМОЧЬ!!! +)

Вот пока получился такой код проги. (генерируется матрица, сохраняется в файл, предварительно пройдя отсортировку элементов через функции isdigit и asalpha)

У меня два вопроса:
1) Если два элемента не удовлетворяют условиям (по функции isalpha и isdigit) то в файле остается просто пустая строка, каким образом удалить эту ненужную строку в файле ?
2) Если у меня, к примеру в матрице оказались две строки где оба элементы буква-буква, то в файле сохраняются эти обе строки, как можно сделать чтобы сохранялась лишь одна.


Код:
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iomanip>
#include <ctype.h>
 
using namespace std;

int IsLetsDigs(int ch1, int ch2)
{
    ch1 = (unsigned char) ch1;
    ch2 = (unsigned char) ch2;
    
    if ((isalpha(ch1) && isalpha(ch2))
     || (isalpha(ch1) && isdigit(ch2))
	 || (isdigit(ch1) && !isalpha(ch2))
	 || (!isalpha(ch1) && isdigit(ch2))
	 || (isalpha(ch1) && !isdigit(ch2)) )
        return 1;
    return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{int i,j;
const int ROW=10;
 const int COL=2;
 char matr[ROW][COL];           
   int s;
   char ntable[] = "ab12!*";
s = sizeof ntable - 1;
   time_t t;
   srand(time(&t));
   srand (unsigned (time (NULL)));
 
   
 for (i=0; i<ROW; i++)                        
        { for (j=0; j<COL; j++)                 
            { matr[i][j]=ntable[rand()%(s-1)]; 
               cout << setw(6) << matr[i][j];
            }
      cout << endl;
  }


FILE* output=fopen("output.txt","w");
for (int i=0; i<ROW; i++)
{
for(int j=0; j<COL; j++)
if (1 == IsLetsDigs(matr[i][0],matr[i][1]))
{
fprintf(output,"%c %c", matr[i][j]);}
fprintf(output, "%c" ,'\n');
}
 
	return 0;
}
Expelio вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами СИ Stases Общие вопросы C/C++ 7 03.01.2010 14:28
Работа с файлами С++ Игорь777 Помощь студентам 2 27.04.2009 23:25
Работа с файлами Cpluser Общие вопросы C/C++ 2 16.02.2009 23:22
Работа с файлами DJ Socol Win Api 1 17.07.2007 09:18
Работа с файлами Acros Помощь студентам 5 14.02.2007 18:40