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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2013, 19:40   #1
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию вивод массива 1 и 0

Добрый вечер, есть такая проблемка, у меня есть файл с небольшим текстом на англ. языке. мне нужно "пробежаться" по этому тексту и сделать такое:
есть текст файла ("aabbcczz") записанный в переменную:
Код:
const int k=256;
char str[k]={""};
есть два массива:
Код:
char masH[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char masV[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
далее берем первые 2 буквы "аа", 1-ю букву сверяем с masH (находим позицию этом буквы в массиве), потом 2-ю букву сверяем с masV (находим позицию)....теперь у нас есть номер строки и номер столбца. Далее записываем "1" на эти позиции в новый двухмерный массив.

Потом сверяем 2 букву и 3, делаем тоже самое, на остальных местах "0"

вот сам код, но не верно и в конце постоянно ошибка стека (за пределы выхожу), помогите пожалуйста:
Код:
const int k=256;
	char str[k]={""};
	char masH[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
	char masV[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
	char rez[26][26];
	setlocale(NULL, "Russian");
	ifstream in("text.txt");

    if(!in)
    {
        cerr << "Cannot open input file!\n";
        return -1;
    }

	 while (!in.eof())
	 {
               in.getline(str,k);
               cout<<str<<endl; 
	 }

for (int n=0; n<=26; n++)
{
  for (int m=0; m<=26; m++)
  {	 
    for (int i=0; i<=strlen(str)+1; i++)
    {
      if ((masH[n]==str[i]) && (masV[m])==str[i+1])
      {
        rez[n][m]='1';
      }
      else
        rez[n][m]='0';
     }
   }
 }

for (int n=0; n<=26; n++)
  for (int m=0; m<=26; m++)
    cout<<rez[n][m]<<" ";
Євгеній Бєлік вне форума Ответить с цитированием
Старый 16.11.2013, 21:02   #2
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Вот тут погляди.
Цитата:
Код:
for (int i=0; i<=strlen(str)+1; i++)
Оператор getline считывает из файла данные строками(ну, если вдруг не знаешь).
Если в файле будет несколько строк, ты рискуешь потерять данные вот этой записью:
Цитата:
Код:
           
   in.getline(str,k);
   cout<<str<<endl;
Советую в данном случае считывать посимвольно.
greenisius вне форума Ответить с цитированием
Старый 16.11.2013, 21:11   #3
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

у меня в файле только такой текст: aabbcczz, так что пока ничего не теряю, в данном случае проблема остается
но все-же спасибо, учту
Євгеній Бєлік вне форума Ответить с цитированием
Старый 16.11.2013, 22:14   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

У Вас массивы masH и masV всегда такие или могут быть другие?
Вариант без массивов (как будто заданы приведенные выше):
Код:
#include <fstream>
#include <iomanip>
#include <iostream>

using namespace std;

int
main()
{
    int k = 26;
    char rez[k][k];
    setlocale(NULL, "Russian");
    ifstream in("text.txt");
    if (!in) {
        cerr << "Cannot open input file!\n";
        return -1;
    }
    for (int n = 0; n < k; ++n)
        for (int m = 0; m < k; ++m)
            rez[n][m] = '0';
    in >> noskipws;
    char r1, r2;
    in >> r2;
    int row, col = r2 - 'a';
    while (!in.eof()) {
        r1 = r2;
        row = col;
        in >> r2;
        col = r2 - 'a';
        if (row >= 0 && row < k && col >= 0 && col < k)
            rez[row][col] = '1';
    }
    for (int n = 0; n < k; ++n) {
        for (int m = 0; m < k; ++m)
            cout << rez[n][m] << " ";
        cout << endl;
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.11.2013, 22:33   #5
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

эти массивы именно такие
спасибо большое оно работает и вроде правильно (точно не проверял, но исходя из результирующего массива все логично правильно
Можно вас попросить объяснить логику данного кода (если вас это не затруднит) начиная со строки:
Код:
in >> noskipws;
просто хочется понять, чтобы потом аналогичных вопросов не возникало...
Євгеній Бєлік вне форума Ответить с цитированием
Старый 16.11.2013, 23:27   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

noskipws - отключили пропуск пробельных символов (табуляция, перенос строки и т.д.). Затем у нас есть 2 символа r1 и r2. r1 характеризует строку, r2 - столбец. Считываем посимвольно файл и "сдвигаем" символы в переменных (значение из r1 заменяется значением из r2, а новое значение в r2 считывается из файла). Чтобы получить индекс массива, вычитаем из символа символ 'a', тогда символы 'a'..'z' дадут индексы 0..25. Осталось проверить перед установкой единицы, что индексы не вышли за пределы массива.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.11.2013, 23:39   #7
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

спасибо, буду разбираться
Євгеній Бєлік вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Произведение элементов массива в функции (передача массива в функцию) (Delphi) Toxa16 Помощь студентам 1 23.04.2011 04:42
Pascal: Составить программу генерирования массива B, состящего из отрицательных элементов массива a mrRastom Помощь студентам 2 15.01.2011 14:33
Сумма и произведение элементов массива, удовлетворяющих условию (генерация float массива) felodese Помощь студентам 1 11.11.2010 20:52
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44