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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текстовые файлы и массивы строк 
:(
    Опции темы
mosssr
Дата 10.12.2012, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В файле хранятся названия фирм. Каждая строка запись об отдельной фирме.
ЗАО Рога и Копыта
ООО Три поросенка
ОАО Аврора
Написать программу, которая читает строки из файла в массив строк, и выводит их на 
экран, отсортировав по названию, исключая правовую форму. Т.е. исходные данные этого 
примера должны быть отсортированы следующим образом:
ОАО Аврора
ЗАО Рога и Копыта
ООО Три поросенка

Код

// Строки.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include "Windows.h"



int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);



    char ru_sl[]="БВГДЖЗКЛМНПРСТФХЦЧШЩбвгджзклмнпрстфхцчшщ";
    int sl[9024];
    int sl2;
    bool fl;
    char *sl3;




    FILE *in;
    int f=0;
    int i,j;
    int k1,k2,k3;
    int max2=0, max3=0, max=0,max1=0,max4=0;
    int flag, flag1=0, flag2;
    char text[9024];
    char seps[] = " .,!():;<>^%$#@?\n«»";
    char *words[255] = {NULL};
    int numWords = 0;
    char menu;
    do
    {    
        printf ("====================================================\n");
        printf ("1-Загрузить из файла\n");
        printf ("2-Вывод на экран, отсортировав по названию, исключая правовую форму. \n");
        printf ("0-Выход\n");
        printf ("====================================================\n");
        menu=getch ();
        switch (menu)
        {
        case '1':
            {
                in=fopen("input.txt","r");
                if(in==NULL)
                {
                    printf ("\nОшибка открытия файла...\n");
                    getch();
                    break;
                }
                fgets(text, 9024, in);
                printf ("\nФайл прочитан.\n");
                fclose(in);


                words[numWords] = strtok( text, seps ); 
                    while( words[numWords] != NULL )
                        {
                    
                            printf( "Слово в файле: %s\n", words[numWords] );
                            numWords++;
                            words[numWords] = strtok( NULL, seps ); 
                        }

        
                break;
            }
        case '2':


Помогите case 2 сделать, пожалуйста. Я думаю, что надо делать сортировку по алфавиту после 1 пробела, но у меня не получается это сделать.

Это сообщение отредактировал(а) mosssr - 10.12.2012, 15:57
PM MAIL   Вверх
NoviceF
Дата 10.12.2012, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(mosssr @  10.12.2012,  16:57 Найти цитируемый пост)
 Я думаю, что надо делать сортировку по алфавиту после 1 пробела, но у меня не получается это сделать.


Гуглить "strtok (разбить строку на токены)" или в таком духе.

Писать только на Си или можно STL?
PM MAIL   Вверх
mosssr
Дата 10.12.2012, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Писать только на Си. 
PM MAIL   Вверх
baldina
Дата 10.12.2012, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mosssr @  10.12.2012,  15:57 Найти цитируемый пост)
сортировку по алфавиту после 1 пробела

Код

int compare (const char**str1, const char**str2) {
  char *s1 = strchr(*str1, ' ');
  char *s2 = strchr(*str2, ' ');
  return strcmp (s1, s2);
}
...
#include <stdlib.h>
...
qsort  (words, numWords, sizeof (char*), compare);
...


Добавлено через 8 минут и 24 секунды
в strcmp нельзя передавать NULL, если могут быть строки без пробелов, нужна проверочка:
Код

  return strcmp (s1?s1:"", s2?s2:"");

PM MAIL   Вверх
feodorv
Дата 10.12.2012, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(mosssr @  10.12.2012,  16:57 Найти цитируемый пост)
Помогите case 2 сделать

Так и с case 1 ещё не разобрались. По условию задания файл состоит из строк, которые нужно вставить в массив строк.
Цитата(mosssr @  10.12.2012,  16:57 Найти цитируемый пост)
                fgets(text, 9024, in);

Это чтение одной-единственной строки. Все остальные строки останутся непрочитанными... Массива строк тоже не просматривается.


Цитата(mosssr @  10.12.2012,  17:49 Найти цитируемый пост)
Писать только на Си.  


Цитата(mosssr @  10.12.2012,  16:57 Найти цитируемый пост)
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    char ru_sl[]="БВГДЖЗКЛМНПРСТФХЦЧШЩбвгджзклмнпрстфхцчшщ";
    int sl[9024];

Увы, это не C. В Си сначала идут объявления переменных, и лишь потом операции.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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