разделить строку точкой с запятой без строк - PullRequest
0 голосов
/ 24 сентября 2019

Я использую C для этого.Я пытался разделить строку, используя точку с запятой в качестве разделителя.Используя аргумент командной строки, я передам строку, такую ​​как «1 + 2; 3 + 4», которую я хочу вывести как 1 + 2 3 + 4. Я не могу использовать strtok для этого.

Я пыталсязапустить цикл for через строку, но он не работает.

 for (int i = 0; argv[1][i] != ';';i++)
    {
        char* argv;
        printf("\n%s", *(argv[1][]));
    }

ЭТО РЕДАКТИРОВАННАЯ ЧАСТЬ

for (int i = 0; argv[1][i] != ';' || argv[1][i] != '\0'; i++)
    {
        for (int j = 0; argv[1][j]; j++)
        {
            char string = argv[1][i] - argv[1][j];

            printf("\n%s", string);
        }

    }

КОГДА Я ПОПЫТАЮСЯ НА ЭТО СЛУЧИТЬСЯ

./check "1 + 2; 3 + 4"
number of arguments: 2
1 + 2; 3 + 4
(null)

почему я получаю ноль здесь?

1 Ответ

0 голосов
/ 24 сентября 2019

Я думаю, вы хотите что-то вроде:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char **argv)
{
        char *str, *start;
        str = malloc( argc > 1 ? strlen(argv[1]) : 50 );
        strcpy( str, argc > 1 ? argv[1] : "1 + 2; 3+4" );
        /* Error checking omitted for brevity */
        do {
                for( start = str; *str && *str != ';'; str++ )
                        ;
                if(*str == ';')
                        *str++ = '\0';
                printf("%s\n", start);
        } while( *str );
}

Учитывая ваше заявленное предпочтение избегать любых функций из стандартной библиотеки, объявленных в string.h, возможно, вы предпочитаете:

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

size_t len( const char *c ) {
        size_t s = 0;
        while( *c++ )
                s+=1;
        return s;
}
int
main(int argc, char **argv)
{
        char *str, *start;
        const char *target = argc > 1 ? argv[1] : "1 + 2; 3 + 4";
        start = str = malloc( len(target) + 1);
        /* Error checking omitted for brevity */
        while( (*str++ = *target++) != '\0')
                ;
        str = start;
        do {
                for( start = str; *str && *str != ';'; str++ )
                        ;
                if(*str == ';')
                        *str++ = '\0';
                printf("token: %s\n", start);
        } while( *str );
        return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...