Функция - 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'.
- Функция не возвращает никакого значения.