Как разбить строку на основе элемента в C - PullRequest
0 голосов
/ 27 июня 2018

Я работал над своим C-проектом и пытался выяснить что-то простое. Как разделить строку на основе ее элемента char. Я знаю, это звучит очень легко, и я знаю, что это так. Но я получаю это действительно странное происшествие, и я не знаю, что с этим делать.

Код:

char str[999] = "Hello World> This is a test";

    char cursort[12];
    for(int i = 0; i < 12; i++)
    {
        cursort[i] = str[i];
    }

    int u = 999 - 12;
    char leftover[u];
    for(int i = 1; i < u + 1; i++)
    {
        leftover[i - 1] = str[i + 11];
    }

    printf("%s\n", cursort);
    printf("%s\n", leftover);
    getchar();

Выход:

Hello World>Hello World> This is a test
 This is a test

Все, что я хочу, - это первые 12 символов в одной строке, а остальные - в отдельной строке.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

ну, во втором цикле вы можете начать с 0 и не вычитать 1. запустите итератор с 12, и вы можете захотеть сделать это

для (int i = 0; str [i + 12]! = 0x00; i ++)

Таким образом, вы избегаете делать X итераций просто копируя нули.

0 голосов
/ 27 июня 2018

Хорошо, во-первых, я удалил ваш динамический массив. Затем я постарался сохранить как можно больше вашего кода, чтобы показать, что происходит с комментариями.

int main(void)
{
    char str[999] = "Hello World> This is a test";

    // Make a string for the first 12 elements.
    char cursort[13];
    for(int i = 0; i < 12; i++)
    {
        cursort[i] = str[i];
    }

    // Terminate it.
    cursort[12] = '\0';

    // Make an array for the remaining data on the stack
    // Size is 12 less than original plus one for terminator.  This should be a constant or a #define
    char leftover[999 - 12 + 1];

    // Copy str into leftover offset by 12.
    for(int i = 12; i<999; i++)
    {
        leftover[i - 12] = str[i];
    }

    // Make sure it is terminated.
    leftover[999] = '\0';

    // Print it
    printf("%s\n", cursort);
    printf("%s\n", leftover);
    getchar();

    return 0;
}

Самое большое изменение в том, как я настроил ваш второй цикл. Я бы также добавил, что подобные манипуляции со строками очень подвержены ошибкам. Для этого вам лучше использовать встроенные подпрограммы.

0 голосов
/ 27 июня 2018

Что-то не так с вашей второй петлей. Попробуйте это.

        int u = 999 - 12;
        char leftover[u];
        for (int i = 0; i < u; i++)
        {
            leftover[i] = str[i + 12];
        }
...