Функция - 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];
    }
}

Объяснение кода листинга программы

  1. Входной параметр функции - это строка s, представленная в виде указателя на первый символ строки.
  2. В функции определены три переменные: i - счетчик символов входной строки, j - индекс первого символа после разделения строки на две части, k - счетчик символов во второй части строки.
  3. Используется цикл for для прохода по каждому символу строки.
  4. Внутри цикла проверяется, является ли текущий символ символом разделения 't'.
  5. Если символ разделения найден, то:
    • символ 't' записывается в массив str1, чтобы сохранить исходную строку.
    • переменная j устанавливается равной i+1, чтобы начать обработку второй части строки.
    • с помощью цикла while копируются все символы после символа разделения в массив str2.
    • последний символ добавляется в массив str2 как символ окончания строки.
    • переменная k устанавливается равной количеству символов во второй части строки.
    • выполнение основного цикла прерывается с помощью оператора break.
  6. Если символ разделения не найден, то каждый символ исходной строки записывается в массив str1.
  7. По завершении цикла for все символы второй части строки сохраняются в массиве str2 в виде строки, оканчивающейся символом окончания строки '\0'.
  8. Первая часть строки сохраняется в массиве str1 в виде строки, оканчивающейся символом окончания строки '\0'.
  9. Функция не возвращает никакого значения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы