Функция - 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'.
- Функция не возвращает никакого значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д