Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.69
Scouser93
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 4
#1

Сортировка фамилий по алфавиту - C++

19.12.2011, 20:33. Просмотров 6533. Ответов 17
Метки нет (Все метки)

В исходном файле input.txt дано несколько фамилий. Нужно отсортировать их по алфавиту и вставить в файл output.txt. Содержимое input.txt и output.txt вывести на экран. Язык C.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2011, 20:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка фамилий по алфавиту (C++):

Сортировка фамилий по алфавиту - C++
В структуре (Рабочие), которая записана в двоичный файл, требуется отсортировать фамилии работников по алфавиту (ну еще найти кол-во...

Сортировка фамилий по алфавиту в файле - C++
В файле записаны фамилии и через пробел номера. Необходимо отсортировать этот "телефонный справочник" по алфавиту, то есть по фамилиям...

Структуры.Сортировка фамилий по алфавиту - C++
Не могу отсортировать по фамилиям.Необходимо использовать функцию bool compare(){...},чтобы сравнить две фамилии.Как это сделать?Что нужно...

Из списка фамилий упорядочить их по алфавиту - C++
Из списка фамилий упорядочить их по алфавиту проверить написание большой буквы Добавлено через 5 минут помогите плс...мучаюсь...

Как сделать сортировку фамилий по алфавиту? - C++
Как сделать сортировку фамилий по алфавиту ?

Строки. [Ввести список фамилий,упорядочить по алфавиту] - C++
Задание = реализовать через вызов функции...

17
zss
Модератор
Эксперт С++
6523 / 6085 / 2002
Регистрация: 18.12.2011
Сообщений: 15,827
Завершенные тесты: 1
19.12.2011, 20:39 #2
Используйте функцию strcmp(str1,str2);
Она возвращает -1, если строки уже отсортированы
(те str2 по алфавиту позже, чем str1),
+1 - если нет и ноль - если строки одинаковые.
0
Scouser93
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 4
19.12.2011, 21:01  [ТС] #3
Напишите, если не сложно, полную программу.
0
zss
Модератор
Эксперт С++
6523 / 6085 / 2002
Регистрация: 18.12.2011
Сообщений: 15,827
Завершенные тесты: 1
19.12.2011, 21:05 #4
А приведите то, что у Вас получилось
0
Scouser93
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 4
19.12.2011, 21:11  [ТС] #5
Это часть программы, которая считывает данные с input.txt и копирует в output.txt. А с сортировкой у меня проблемы)) Помогите, если не сложно. Очень надо. Буду признателен.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <string.h>
int main ()
{
    char fio [100]; 
    int swin;       
    FILE *fpin,*fpout;  
    fpin = fopen ("C:/Users/kylik/Desktop/input.txt", "r"); 
    fpout = fopen ("C:/Users/kylik/Desktop/output.txt", "w");
    for (;;)        
    {
        swin = fscanf (fpin, "%s", fio);
        if (swin == EOF)   
           break;            
                    printf ("\nFamilija: %s",fio);
        fprintf(fpout,"%s\n",fio);
    }
    printf ("\nSpisok familij sakonchilsja...\n");
    printf ("\n------------------------------\n");
    
    fclose(fpin);  
    fclose(fpout); 
    fpin = fopen ("C:/Users/kylik/Desktop/output.txt", "r"); 
    for (;;)    
    {
        swin = fscanf (fpin, "%s", fio);
        if (swin == EOF)   
            break;         
        printf("%s\n",fio);
    };
  
    fclose (fpin);    
      getchar();        
     return 0;         
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
zss
Модератор
Эксперт С++
6523 / 6085 / 2002
Регистрация: 18.12.2011
Сообщений: 15,827
Завершенные тесты: 1
19.12.2011, 21:29 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    char fio[1000][100]; // массив на 1000 фамилий
    int n=20; // прочитано 20 фамилий
....
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            if(strcmp(fio[i],fio[j])==1) // еще неотсортировано
            {
                char t[100]; // переставляем
                strcpy(t,str[i]);
                strcpy(str[i],str[j];
                strcpy(str[j],t);
            }
        }
    }
1
vibe
0 / 0 / 1
Регистрация: 11.12.2010
Сообщений: 7
22.12.2011, 20:13 #7
а какой окончательный полный вариант? напишите,пожалуйста.. а то у меня такое же задание
0
zss
Модератор
Эксперт С++
6523 / 6085 / 2002
Регистрация: 18.12.2011
Сообщений: 15,827
Завершенные тесты: 1
23.12.2011, 20:06 #8
Цитата Сообщение от vibe Посмотреть сообщение
а какой окончательный полный вариант? напишите,пожалуйста.. а то у меня такое же задание
Уж постарайтесь самостоятельно собрать из двух кусков один.
Если не получится, то Вам не стоит вообще браться за программирование.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
23.12.2011, 20:13 #9
C
1
2
int cmp (const void *a, const void *b)  { return strcmp ( *(char **) a, *(char **) b ) ; }
qsort (arr, Num, sizeof (arr[0]), cmp);
0
nicenice
3 / 3 / 0
Регистрация: 22.11.2011
Сообщений: 168
21.01.2012, 20:40 #10
а можно всё перевести на С?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.01.2012, 21:04 #11
Цитата Сообщение от nicenice Посмотреть сообщение
а можно всё перевести на С?
Вроде как, везде в этой теме Си - коды.
0
Dimon0907
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 6
28.05.2013, 03:14 #12
здесь ведь исходные данные из текста надо ввести в массив? если да, то как это сделать?

Добавлено через 41 минуту
почему-то не сортирует?
0
ServerCydia
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 3
21.09.2015, 21:30 #13
А у меня вот задача посложнее: нужно, что бы фамилии сортировались после инициалов,т.е.

J.X. Smith
B.A. Weiter
A.C. Johnes
0
daslex
1283 / 527 / 109
Регистрация: 02.08.2011
Сообщений: 2,750
21.09.2015, 23:58 #14
ServerCydia,
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <string.h>
 
int main(){
 
    char Famil[255];
    char fio[100][255];
    char ArrInitial[100][7];
 
    FILE *fp = fopen("D:\\in.txt","r");
        if(fp == NULL)
        {
            printf("can not open file '%s'","D:\\in.txt");
            return 0;
        }
 
        int n=0;
 
 
    while(fgets(fio[n],sizeof(Famil),fp)){
        strncpy(ArrInitial[n],fio[n],5);
        ArrInitial[n][6]=0;
 
        int k=strlen(fio[n]);
        strncpy(fio[n],fio[n]+5,k-5);
        fio[n][k-6]=0;
 
 
 
        n++;
    };
    fclose(fp);
    printf("%s","\n");
 
    char t[100], u[7];
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            if(strcmp(fio[i],fio[j])==1) // еще неотсортировано
            {
                // переставляем
                strcpy(t,fio[i]);
                strcpy(fio[i],fio[j]);
                strcpy(fio[j],t);
 
                strcpy(u,ArrInitial[i]);
                strcpy(ArrInitial[i],ArrInitial[j]);
                strcpy(ArrInitial[j],u);
            }
        }
    }
 
 
/*Я просто вывел на экран, в файл запишите сами*/
for (int i=0;i<n;i++){
    printf("%s%s%s",ArrInitial[i],fio[i],"\n");
}
 
}
0
Barrent
244 / 120 / 41
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
22.09.2015, 01:09 #15
ServerCydia,
Сделал без файлов - их сами уже добавите.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
bool Compare(const string &left, const string &right);
size_t FindSurnameIndex(const string  &fio);
 
int main()
{
    vector<string> names;   
    //вводим данные
    names.push_back("J.X.Smith");
    names.push_back("B.A. Weiter");
    names.push_back("A.C. Johnes");
    //сортировка
    std::sort(names.begin(), names.end(), Compare);
    //вывод на экран
    for (auto name = names.begin(); name != names.end(); name++){
        cout << *name << endl;
    }
    system("pause");
    return 0;
}
 
//Сравнение 2-х ФИО
bool Compare(const string &left, const string &right){
    //Находим индексы начала фамилий
    size_t left_index_dot = FindSurnameIndex(left);
    size_t right_index_dot = FindSurnameIndex(right);
 
    //Сравниваем фамилии
    for (size_t i = left_index_dot, j = right_index_dot; i < left.length(), j < right.length(); i++, j++){
 
        if (left[i] < right[j])
            return true;
 
        if (left[i] > right[j])
            return false;
 
        if ((i + 1 == left.length()) && (j + 1 < right.length()))
            return true;
 
        if ((i + 1 < left.length()) && (j + 1 == right.length()))
            return false;
 
        if ((i + 1 == left.length()) && (j + 1 == right.length()))
            return true;
    }
    return true;
}
 
//Возвращает позицию фамилии
size_t FindSurnameIndex(const string  &fio){
    //находим позицию первой точки
    size_t first_dot = fio.find('.');
    size_t non_space;
    //если точки нет, то возвращаем позицию первого не пробела (или 0 если все пробелы)
    if (first_dot == string::npos){
        non_space = fio.find_first_not_of(' ');
        if (non_space == string::npos)
            return 0;
        return non_space;
    }
        
    //находим позицию второй точки  
    size_t second_dot = fio.find('.', first_dot + 1);
    //если точки нет, то возвращаем позицию первого не пробела (или 0 если все пробелы) после первой точки
    if (second_dot == string::npos){
        non_space = fio.find_first_not_of(' ', first_dot + 1);
        if (non_space == string::npos)
            return 0;
        return non_space;
    }
    
    //возврат позиции не пробела после второй точки
    non_space = fio.find_first_not_of(' ', second_dot + 1);
    if (non_space == string::npos)
        return second_dot + 1;
    return non_space;
}
1
22.09.2015, 01:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2015, 01:09
Привет! Вот еще темы с ответами:

ввести список из 10 фамилий, расположенных в произвольном порядке и упорядочить их по алфавиту - C++
Помогите пожалуйста.Вот задание:&quot;ввести список из 10 фамилий, расположенных в произвольном порядке и упорядочить их по алфавиту&quot;

задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту - C++
Вот код : #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int Fam...

Задача со строками (ввод списка фамилий через запятую в виде строки. Фамилии должны быть отсортированы по-алфавиту) - C++
Добрый день, форумчане. Пожалуйста, взгляните на приложенный код и помогите выявить ошибку. Задача программы - ввод списка фамилий через...

сортировка фамилий - C++
я не могу отсортировать список фамилий по алфавиту и проверить написание большой буквы вначале..подскажите пожалуйста..ато завалю сессию ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru