Расщепление строки - PullRequest
       12

Расщепление строки

0 голосов
/ 15 декабря 2018

Я пытаюсь создать программу, которая должна разбивать строку пополам, но пока программа печатает случайные буквы, когда я хочу, чтобы она прочитала то, что пишет пользователь, и использовала строку, чтобы разделить ее пополам.Другое дело, что я не уверен, как записать разбиение на две части (эту часть я написал как str / 2).

int main() {
    int x;

    printf("Pick the program that should be executed:\n");
    printf(" 1. Split text\n Enter an option:\n");
    scanf("%d", &x);

    if (x == 1) {
    // testing example
        printf("Write the text you want to use:\n");
        char str[100];
        fgets(str, 100, stdin);
        printf("Input was: %s\n", str);

        char test[] = str;
        char *left;
        char *right;

        // first make a copy
        left = strcpy(test);

        // second locate the desired text and split in half
        right = strstr(left, (str/2));

        // third split the string
        *(right - 1) = '\0';

        // print the results
        printf("Original : %s\nLeft side: %s\nRight side: %s\n\n", test, left, right);

        // clean up
        free(left);
    }
    return main();
}

1 Ответ

0 голосов
/ 15 декабря 2018

Это возможное решение для вашей проблемы, и проблема была в Точка 1 , где вы используете случай A или случай B .Проблема в том, что вы использовали функции scanf и fgets, а поскольку scanf не использует \n и fgets, вы всегда будете получать "пустую" строку (просто \n) в переменной str.Таким образом, в случае A вы просто используете другой scanf или в случае B вам нужно использовать этот последний \n, а затем прочитать желаемую строку.

Кроме того, для части разделения я просто использую простую функцию memcpy и разделяю строку пополам с помощью strlen , чтобы вычислить длину строки.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int x;

    printf("Pick the program that should be executed:\n");
    printf(" 1. Split text\n Enter an option:\n");
    scanf("%d", &x);

    if (x == 1) {
        printf("Write the text you want to use:\n");
        char str[100];

        // -- Point 1 --
        // A
        //scanf("%s", str); 

        // B
        getchar();
        fgets(str, 100, stdin);
        // -------------

        printf("Input was: %s\n", str);

        int len = strlen(str);
        char *left, *right;
        left = malloc(len/2 + 1);
        right = malloc(len/2 + 1);

        memcpy(left, str, len/2);
        left[len/2] = 0;
        memcpy(right, str + len/2, len/2);
        right[len/2] = 0;

        // print the results
        printf("Original : %s\nLeft side: %s\nRight side: %s\n\n", str, left, right);

        // clean up
        free(left);
        free(right);
    }
    return 0;
}
...