Функция - Parse(s,t). Разделение строки s на две части: до первого вхождения символа t и после него - C (СИ)
Формулировка задачи:
Функция - Parse(s,t). Разделение строки s на две части: до первого вхождения символа t и после него
Нужно разработать два варианта заданной функции - используя традиционную обработку массивов и используя адресную арифметику. ПОМОГИТЕ!
Как можно сделать используя традиционную обработку массивов?
" используя адресную арифметику" задача вроде бы решаеться так:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define n 100 int c; char str1[n], str2[n]; char* tmp = 0; void Parse(char *strr) { for (char* p = strr; *p; p++) printf("%c", *p); printf("\n"); for (char* p = strr; *p; p++) if (*p == 't') { tmp = p; printf("%d", p - strr); printf("\n"); break; } for (char* p = strr, *p1 = str1, *p2 = str2; *p; p++) { if (p < tmp) { *p1 = *p; p1++; } else if (p > tmp) { *p2 = *p; p2++; } } } int main() { while (!(c == 27)) { system("cls"); printf(" Enter - run the program.\n"); printf(" Esc - exit.\n"); printf(" Any other key - information about program.\n"); c = getch(); system("cls"); switch (c) { case 13: { char str[n]; fputs(" Vvedite tekst -> ", stdout); fgets(str, sizeof(str), stdin); Parse(str); for (char* p = str1; *p; p++) printf("%c", *p); printf("\n\t\t < - Pervaya chast'\n\n"); for (char* p = str2; *p; p++) printf("%c", *p); printf("\t\t < - Vtoraya chast'\n"); printf("\n\n\n Esc - exit.\n"); printf(" Any other - go to the main page.\n"); c = getch(); break; system("cls"); } case 27: break; default: { system("cls"); printf(" Funktsiya - Parse (s, t). Razdeleniye strok s na dve chasti: \n"); printf(" do pervogo vkhozhdeniya simvola t i posle nego\n"); printf("\n\n Esc - exit.\n"); printf(" Any other - go to the main page.\n"); c = getch(); system("cls"); break; } } } return 0; }
Решение задачи: «Функция - Parse(s,t). Разделение строки s на две части: до первого вхождения символа t и после него»
textual
Листинг программы
void Parse(char *str) { int i, j = 0, k = 0; for(i = 0; str[i]; i++){ if(str[i] == 't'){ str1[i] = '\0'; j = i + 1; while(str[j]) str2[k++] = str[j++]; str2[k] = '\0'; break; } str1[i] = str[i]; } }
Объяснение кода листинга программы
- Входной параметр функции - это строка s, представленная в виде указателя на первый символ строки.
- В функции определены три переменные: i - счетчик символов входной строки, j - индекс первого символа после разделения строки на две части, k - счетчик символов во второй части строки.
- Используется цикл for для прохода по каждому символу строки.
- Внутри цикла проверяется, является ли текущий символ символом разделения 't'.
- Если символ разделения найден, то:
- символ 't' записывается в массив str1, чтобы сохранить исходную строку.
- переменная j устанавливается равной i+1, чтобы начать обработку второй части строки.
- с помощью цикла while копируются все символы после символа разделения в массив str2.
- последний символ добавляется в массив str2 как символ окончания строки.
- переменная k устанавливается равной количеству символов во второй части строки.
- выполнение основного цикла прерывается с помощью оператора break.
- Если символ разделения не найден, то каждый символ исходной строки записывается в массив str1.
- По завершении цикла for все символы второй части строки сохраняются в массиве str2 в виде строки, оканчивающейся символом окончания строки '\0'.
- Первая часть строки сохраняется в массиве str1 в виде строки, оканчивающейся символом окончания строки '\0'.
- Функция не возвращает никакого значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д