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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2012, 17:01   #1
mosssr
 
Регистрация: 21.11.2012
Сообщений: 4
По умолчанию Текстовые файлы и массивы строк

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

Цитата:
// Строки.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 вне форума Ответить с цитированием
Старый 12.12.2012, 00:21   #2
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

самая простая сортировка..... пузыркёвая.... она так называется

для перетасовки нужен массив строк

Код:
void Sort(char* strs[], int size)
{
char* temp;

for(int a = 1; a < size; ++a)
{
for(int b = size - 1; b >= a; --b)
{
if(strncmp(strs[b-1], strs[b])>0) /// ошибка была
{
temp = strs[b-1];
strs[b-1] = strs[b];
strs[b] = temp;
}
}
}
}
сюда нужно без ОАО или ООО

можно попробовать
Код:
!strncmp(strs[b-1] + 4, strs[b] + 4)
по идеи должно сработать...

это очень медленно.. но для малого списка сойдёт.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 12.12.2012 в 00:27. Причина: дописал
Perchik71 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовые файлы SVing Паскаль, Turbo Pascal, PascalABC.NET 23 13.05.2012 06:59
Текстовые файлы Mors13 Помощь студентам 1 19.05.2011 16:29
ТЕКСТОВЫЕ ФАЙЛЫ В С++ artscorp Помощь студентам 0 10.05.2011 17:24
Текстовые файлы (C++) -=DOBRO=- Помощь студентам 16 24.12.2009 22:34
Текстовые файлы Aset Помощь студентам 0 07.06.2009 15:29