Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Капитан Кузьма
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 1
#1

Сортировка строк по возрастанию и убыванию длин слов - C++

19.11.2014, 13:29. Просмотров 259. Ответов 0
Метки нет (Все метки)

Написал код, в котором принимаются две строки. Первая сортируется по возрастанию длин слов, вторая по убыванию. В результате нужно получить строку, в которой на нечётных местах слова первой строки, на чётных - второй. Если в одной из строк заканчиваются слова, использовать её заново.
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Lab_1.cpp : Defines1 the1 entry point for the1 console1 application.
//
 
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#pragma warning(disable : 4996)
using namespace std;
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
int n1 = 0, n2 = 0;
char line1[40];
char line2[40];
char buf[41];
char buf2[41];
bool flag = 1;
int e1, e2;
printf("Lab 1. Samoylenko Semen 6213. Variant - 17\n");
printf("\nEnter first line:");//первая строка
for (int i = 0; i < 40; i++)
{
if (line1[i] == '\n')
{
e1 = i - 1;
break;
}
if (flag == 0)
{
line1[i] = '\0';
e1 = i;
break;
}
printf("\nEnter %d symbol- ", i+1);
line1[i] = getchar();
printf("\nContinue? (1-Yes, 0-No) - ");
cin >> flag;
getchar();
}
char* p;
char* line11 = (char*)malloc(sizeof(char)*41);
strcpy(line11, "");
for (int leng = 1; leng < e1; leng++)//сортировка по возрастанию
{
strcpy(buf, line1);
p = strtok(buf, " .,;-");
while (p != NULL)
{
if (strlen(p) == leng)
{
strcat(line11, p);
strcat(line11, " ");
n1++;
}
p = strtok(NULL, " .,;-");
}
}
flag = 1;
printf("\nEnter second line:");//вторая строка
for (int i = 0; i < 40; i++)
{
if (line2[i] == '\n')
{
e2 = i - 1;
break;
}
if (flag == 0)
{
line2[i] = '\0';
e2 = i;
break;
}
printf("\nEnter %d symbol- ", i + 1);
line2[i] = getchar();
printf("\nContinue? (1-Yes, 0-No) - ");
cin >> flag;
getchar();
}
char* line22 = (char*)malloc(sizeof(char)* 41);
strcpy (line22, "");
for (int leng = e2; leng > 0; leng--)//сортировка по убыванию
{
strcpy(buf, line2);
p = strtok(buf, " .,;-");
while (p != NULL)
{
if (strlen(p) == leng)
{
strcat(line22, p);
strcat(line22, " ");
n2++;
}
p = strtok(NULL, " .,;-");
}
}
char* p2;
char* result = (char*)malloc(sizeof(char)* 81);
strcpy(result, "");
strcpy(buf, line11);
strcpy(buf2, line22);
p = strtok(buf, " .,;-");
p2 = strtok(buf2, " ,.;-");
while (n1 > 0 || n2 > 0)// построение результирующей строки
{
while (p != NULL && p2 != NULL)
{
strcat(result, p);
strcat(result, " ");
p = strtok(NULL, " .,;-");
n1--;
strcat(result, p2);
strcat(result, " ");
p2 = strtok(NULL, " ,.;-");
n2--;
}
if (n1 < 1)
{
strcpy(buf, line11);
p = strtok(buf, " .,;-");
}
if (n2 < 1)
{
strcpy(buf2, line22);
p2 = strtok(buf2, " ,.;-");
}
}
printf("\nEntered first line: %s", line1);
printf("\nSorted first line: %s\n", line11);
printf("\nEnterd second line: %s", line2);
printf("\nSorted second line: %s\n", line22);
printf("\nResult line: %s\n",result);
system("PAUSE");
return 0;
}
Ошибка заключается в том, что при формировании результирующей строки, p= strtok (NULL, " .,;-") и p2=strtok(NULL, " .,;-") работают некорректно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 13:29     Сортировка строк по возрастанию и убыванию длин слов
Посмотрите здесь:

Сортировка элементов строк матрицы по убыванию C++
Сортировка массива по возрастанию или по убыванию, в зависимости от параметра C++
Быстрая сортировка. Сложности с сортировкой по возрастанию и убыванию C++
Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию C++
Целочисленный одномерный массив, сортировка по убыванию и возрастанию C++
C++ Сортировка строк матрицы по возрастанию
Сортировка массива вставкой, чтобы четные числа шли по возрастанию, а нечетные по убыванию C++
C++ Сортировка первой половины массива по возрастанию, а второй по убыванию
C++ Сортировка элементов строк матрицы по возрастанию
C++ Вывести слова по возрастанию или убыванию их длин
C++ Сортировка строк матрицы по убыванию
C++ Упорядочить слова в предложении по возрастанию длин слов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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