-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathalg10.c
More file actions
30 lines (30 loc) · 1.74 KB
/
Copy pathalg10.c
File metadata and controls
30 lines (30 loc) · 1.74 KB
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
int main() {
char str[200], zn[] = " ,.!?;"; char** w; int k;
setlocale(LC_ALL, "ru");
printf("Введи строчку:\n"); fgets(str, 200, stdin);
strcat(str, " "); //str + ''
w = calloc(strlen(str), sizeof(char*)); (k) = 0;
char tmp[200] = { 0 }; //делаем tmp пустым множеством
strcpy(tmp, "");
for (int i = 0; i < strlen(str); i++) { // для каждого символа строки
if (strchr(zn, str[i]) == 0) // если текущий (итый) символ не знак препинания
{ strncat(tmp, &str[i], 1); } // добавялем его к tmp (форм-м текущее слово)
else { // если текущ символ знак препинания
if (strlen(tmp) != 0) { // если в tmp до этого что-то лежало (пока не уперлись в знак преп-я)
w[(k)] = calloc(strlen(tmp) + 1, sizeof(char));
strcpy(w[(k)], tmp); //добавялем в массив-ответ то что лежало в tmp (слово)
strcpy(tmp, ""); // очищаем tmp (делаем пустым)
(k)++; } // увеличиваем индекс массива-ответа
if (str[i] != ' ') { // если текущий символ не пробел
w[(k)] = calloc(2, sizeof(char));
strncat(w[(k)], &str[i], 1); // добавляем в массив-ответ
(k)++; }
}
}
printf("Слова:\n"); for (int i = 0; i < k; i++) { printf("%s\n", w[i]); }
}