Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С] Работа с файлами и со строками. 
V
    Опции темы
InviZible
Дата 7.10.2007, 18:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Как считать из файла стоки и заполнить массивы словами или разделителями из этой строки?

Например, дан текст : 
start end begin else if poka to qwe to tut
! @ # $ % ) ( * & % + -

Нужно первый массив Key заполнить словами из первой строки,
а второй массив Raz заполнить словами из второй строки.

Я пытался сделать, через fscanf(), но он до конца файла бежит и заполняет только первый массив всеми элементами текста(не получается определить конец первой строки, чтобы начать заполнение второго массива элементами второй строки).

Пытался через fgets(), но как "выдерать" слова из строки в массив? 
Читал про строки и указатели - везде сухая теория.

strtok() использывать нельзя.

Заранее спасибо.
PM MAIL   Вверх
0lmer
Дата 9.10.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



попробуй fgets(), она должна считывать только одну строку. Считывайй строки а потом разбивай как хочешь.
Или посимвольно Ж

Код


char c;

while (!feof(f)) {
  fscanf(f, "%c", &c);
  //пока с != '\n' заносишь слова в Key
  //после того как с == '\n' (конец строки) начинаешь заносить в Raz 
}

fclose(f);



Это сообщение отредактировал(а) 0lmer - 9.10.2007, 13:24
PM   Вверх
Rockie
Дата 10.10.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(InviZible @  7.10.2007,  18:21 Найти цитируемый пост)
Пытался через fgets(), но как "выдерать" слова из строки в массив? 


InviZible, так строка и есть маассив. Тебе нужно из 
Цитата(InviZible @  7.10.2007,  18:21 Найти цитируемый пост)
start end begin else if poka to qwe to tut

получить 
Цитата(InviZible @  7.10.2007,  18:21 Найти цитируемый пост)
startendbeginelseifpokatoqwetotut

?

Добавлено через 4 минуты и 8 секунд
Код
#include <stdio.h>

int main()
{
   char str[100];
   char sym[100];

   // открыли
   FILE * pFile = fopen ("myfile.txt" , "r");
 
   // проверили 
   if(pFile == NULL) 
   {
       puts("Error opening file");
       return 1;
   }
       
   // считываем первую строку
   fgets(str , 100 , pFile);
   // считываем вторую строку
   fgets(sym , 100 , pFile);
 
   // удаляем пробелы
   // ..

   puts(str);
   puts(sym);

   fclose (pFile);
   
   return 0;
}


а чтобы удалить пробелы из строки, используя указатели - смотри ссылку.


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
InviZible
Дата 13.10.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Спасибо за ответ, но не много не то.
Нужно каждое слово занести в массив. Например,
mas[0][10]="start"
mas[1][10]="end"
mas[2][10]="begin"
mas[3][10]="end"
...
mas[i][10]="tut"

10 - размер строки, i - элемент в массиве
PM MAIL   Вверх
Rockie
Дата 15.10.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



InviZibleздесь есть пример создания двумерного массива на C. 
Цитата(InviZible @  7.10.2007,  18:21 Найти цитируемый пост)
не получается определить конец первой строки, чтобы начать заполнение второго массива элементами второй строки

В текстовом файле перенос строки обозначается как '\n' , остается читать в массив посимвольно и проверять наличие этого спецсимвола.




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
0lmer
Дата 15.10.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



Цитата(Rockie @  10.10.2007,  09:16 Найти цитируемый пост)
 но как "выдерать" слова из строки в массив? 


читаешь до пробела в первый элемент массива, после первого пробела - во второй, после второго - в третий...

кол-во слов можно определить по кол-ву пробелов заранее и создать динамич. массив.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.