分割字符串

时间:2018-12-15 01:41:32

标签: c string split

我正在尝试制作一个应将字符串分成两半的程序,但到目前为止,当我希望它读取用户编写的内容并使用字符串将其分成两半时,该程序正在打印出随机字母。另一件事是我不确定如何将拆分写成两部分(我将该部分写为str / 2)。

Configuration File (php.ini) Path: /etc/php/5.6/cli Loaded
Configuration File: /etc/php/5.6/cli/php.ini
Scan for additional .ini
files in: /etc/php/5.6/cli/conf.d Additional .ini
files parsed:/etc/php/5.6/cli/conf.d/10-mysqlnd.ini

1 个答案:

答案 0 :(得分:0)

这可能是解决您的问题的方法,问题出在第1点,您可以使用情况A 情况B 。这里的问题是,您同时使用了scanffgets函数,并且由于scanf不消耗\nfgets,您总是会得到一个\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;
}