Skip to content

Commit 16cdf6f

Browse files
authored
Merge pull request #19 from DenCoder618/lab-6-dev
Lab 6 dev passed
2 parents 6b3a269 + 40461d7 commit 16cdf6f

File tree

3 files changed

+43
-62
lines changed

3 files changed

+43
-62
lines changed

Semester_1/Lab_5/Lab_5.c

Lines changed: 26 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,44 @@
1-
// Ââåñòè ñòðîêó. Çàìåíèòü çíàêè ïðåïèíàíèÿ íà ñîêðàùåíèÿ
2-
// ('.' - ò÷ê, ',' - çïò, '?' - âïð, ':' - äò÷)
3-
4-
// If cyrillic symbols are broken:
5-
// ctrl + shift + P -> Change file rncoding -> Reopen with encoding -> Windows 1251
6-
7-
#define USE_RUS 0 // 1 - yes
1+
// Ввести строку. Заменить знаки препинания на сокращения
2+
// ('.' - тчк, ',' - зпт, '?' - впр, ':' - дтч)
83

94
#include <stdio.h>
105
#include <stdlib.h>
11-
#if USE_RUS == 1
12-
#include <locale.h>
13-
#endif
6+
#include "reducts.c"
147

158
#define length(x) (sizeof(x) / sizeof((x)[0]))
16-
int len = 0;
179

18-
char *readstr()
19-
{
10+
int len = 0;
11+
char *readstr() {
2012
len = 0;
21-
int capacity = 1; // åìêîñòü äèíàìè÷åñêîé ñòðîêè
22-
char *s = (char *)malloc(sizeof(char)); // äèíàìè÷åñêàÿ ïóñòàÿ ñòðîêà
13+
int capacity = 1;
14+
char *s = (char *)malloc(sizeof(char));
2315
char c = getchar();
24-
while (c != '\n')
25-
{
16+
while (c != '\n') {
2617
s[(len)++] = c;
27-
if (len >= capacity)
28-
{ // åñëè ðåàëüíûé ðàçìåð áîëüøå ðàçìåðà êîíòåéíåðà, òî óâåëè÷èì åãî ðàçìåð
29-
capacity *= 2; // óâåëè÷èâàåì åìêîñòü â äâà ðàçà
30-
s = (char *)realloc(s, capacity * sizeof(char)); // ñîçäà¸ì íîâóþ ñòðîêó ñ óâåëè÷åííîé åìêîñòüþ
18+
if (len >= capacity) {
19+
capacity *= 2;
20+
s = (char *)realloc(s, capacity * sizeof(char));
3121
}
3222
c = getchar();
3323
}
3424
s[len] = '\0';
35-
return s; // âîçâðàùàåì óêàçàòåëü
25+
return s;
3626
}
3727

38-
void print_char(char ch)
39-
{
40-
switch (ch)
41-
{
42-
case '.':
43-
printf(USE_RUS == 1 ? "Ò×Ê" : "DOT");
44-
break;
45-
case ',':
46-
printf(USE_RUS == 1 ? "ÇÏÒ" : "COMMA");
47-
break;
48-
case '!':
49-
printf(USE_RUS == 1 ? "ÂÑÊË" : "EXCLM");
50-
break;
51-
case '?':
52-
printf(USE_RUS == 1 ? "ÂÏÐÑ" : "QSTN");
53-
break;
54-
case ':':
55-
printf(USE_RUS == 1 ? "ÄÂÒ×" : "COLON");
56-
break;
57-
default:
58-
printf("%c", ch);
59-
break;
28+
void main() {
29+
printf("Input string:\n");
30+
char *str = readstr();
31+
32+
printf("\nString after replace:\n");
33+
for (int i = 0; i < len; i++) {
34+
int flag = 1;
35+
for (int c = 0; c < W_COUNT; c++) {
36+
if (str[i] == punct[c]) {
37+
printf("%s", words[c]);
38+
flag = 0;
39+
}
40+
}
41+
if (flag) printf("%c", str[i]);
6042
}
61-
}
62-
63-
void main()
64-
{
65-
#if USE_RUS == 1
66-
setlocale(LC_ALL, "Russian");
67-
system("chcp 1251");
68-
#endif
69-
70-
printf(USE_RUS == 1 ? "Ââåäèòå ñòðîêó:\n" : "Input string:\n");
71-
char *str = readstr(); // ñ÷èòûâàåì äèíàìè÷åñêóþ ñòðîêó
72-
printf(USE_RUS == 1 ? "\nÑòðîêà ïîñëå çàìåíû:\n" : "\nString after replace:\n");
73-
for (int i = 0; i < len; i++)
74-
print_char(str[i]);
7543
free(str);
7644
}

Semester_1/Lab_5/Lab_5_dop.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
// Ввести строку. Заменить знаки препинания на сокращения
22
// ('.' - тчк, ',' - зпт, '?' - впр, ':' - дтч)
3+
34
// доп: обратная задача, заменить сокращения на символы
45
// * учитывать любой регистр
56

67
#include <stdio.h>
78
#include <stdlib.h>
8-
9-
#define W_COUNT 5
10-
const char words[W_COUNT][6] = {"DOT", "COMMA", "EXCLM", "QSTN", "COLON"};
11-
const char punct[W_COUNT] = {'.', ',', '!', '?', ':'};
9+
#include "reducts.c"
1210

1311
char lower(int c) {
1412
return c > 64 && c < 91 ? c + 32 : c;

Semester_1/Lab_5/reducts.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#define W_COUNT 24
2+
3+
const char words[W_COUNT][7] = {
4+
"XCLM", "QTES", "HASH", "DLLR", "PRCNT", "AMPSND",
5+
"LBRCK", "RBRCK", "ASTRK", "PLUS", "MINUS", "SLSH",
6+
"DOT", "COMMA", "COLON", "SCLN", "ATSMB", "QSTN",
7+
"LARR", "EQUL", "RARR", "TILDE", "PIPE", "UNDSC"
8+
};
9+
10+
const char punct[W_COUNT] = {
11+
'!', '"', '#', '$', '%', '&',
12+
'(', ')', '*', '+', '-', '/',
13+
'.', ',', ':', ';', '@', '?',
14+
'<', '=', '>', '~', '|', '_'
15+
};

0 commit comments

Comments
 (0)