С, превращая верблюжий текст в змеиный - PullRequest
0 голосов
/ 21 октября 2018

Я абсолютный новичок, я хочу создать приложение, которое для каждого нижнего слова верблюда слова, переданного в качестве аргумента командной строки, будет выводить его змеиное эквивалента.Также превращает большие буквы в меньшие и делает между ними "_".

Пример:

./coverter Iwant tobe famousAlready.

вывод:

i_want
tobe
famous_already

Я нашел какой-то код, чтобы уменьшить буквы, и выводить слова в командной строке отдельно.Но я понятия не имею, как их соединить, как обратиться к одному символу в функции main?Это вообще возможно?

#include <stdio.h>

int main (int argc, char* argv[]);
{
    printf("argc = %d\n", argc);

    for (int i = 0; i < argc; i++)
    {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
}

char change()
{
    char words[30]; 
    int ch;

    printf ("Give the words: ");

    int i=0;

    while ((ch=getchar()) != EOF) 
    {
        slowko[i]=ch;
        if(isupper(slowko[i])) /* isupper, robi rzeczy - sprawdza czy */
                               /* litera z sekwencji jest duza */
        {
            slowko[i]=tolower(ch); /*zamien duzy znak na maly*/
            printf("_");
        }
        else if(slowko[i] == ' ')
        {
            printf("\n");
        }

        printf ("%c", slowko[i]);
        i++;
    }
}

1 Ответ

0 голосов
/ 22 октября 2018

У вас есть аргументы командной строки внутри argv массива, начиная с индекса 1. Возможно, это не самое элегантное решение, но оно работает:

#include <stdio.h>
#include <ctype.h>

void print_snake_case(const char str[]){

    int i = 0;
    while (str[i] != '\0')
    {
        if(isupper((unsigned char) str[i])) /*isupper, robi rzeczy - sprawdza     czy     litera z sekwencji jest duza*/
        {
            const char ch = tolower((unsigned char) str[i]); /*zamien duzy znak na maly*/

            /*
               Different order of "_": it should be placed after
               the character in case it's at the beginning of the word.         
               And before the character if it's not at the beginning.
            */
            if(i != 0)
            {
                printf("_");
                printf ("%c", ch);
            }
            else
            {
                printf ("%c", ch);
                printf("_");
            }
        }
        else
            printf ("%c", str[i]);


        i++;
    }

    printf("\n");
}

int main (int argc, char* argv[])
{
    for (int i = 1; i < argc; i++)
    {
        print_snake_case(argv[i]);
    }
}

Вывод:

$ ./converter Iwant tobe famousAlready
i_want
tobe
famous_already
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...