Разделение строки и использование индекса для вызова нужного элемента - PullRequest
0 голосов
/ 24 октября 2018

Разделение строки с определенным разделителем и последующее использование индексов для вызова требуемого элемента - довольно простая задача в python.В частности, вызов второго последнего элемента из списка переменной длины (поскольку данная строка может содержать много элементов после разбиения), является легкой прогулкой из-за простого синтаксиса.

Пример:

str = "swscan.apple.com"
str_list = str.split(".")
print(str_list)
print(str_list[-2])

Вывод этого будет:

['swscan', 'apple', 'com']
apple

Но делать то же самое в C - довольно утомительная работа.Я должен использовать функцию strtok для того же самого, которая затем сохраняется в значении указателя, а затем пересекается, что дает нам элементы после разделения.

Я могу добиться этого, новещь, которая действительно отталкивает меня - это та часть, где я должен получить доступ ко второму последнему элементу того же самого.Может ли кто-нибудь помочь мне, как это может быть достигнуто?Вот что я сделал до сих пор:

int main()
{
    char str[] = "swscan.apple.com";
    int init_size = strlen(str);
    char delim[] = ".";

    char *ptr = strtok(str, delim);

    while(ptr != NULL)
    {
        printf("'%s'\n", ptr);
        ptr = strtok(NULL, delim);
    }
    return 0;
}

Вывод этого будет:

'swscan'
'apple'
'com'

Но это все еще не в структурированном формате, с помощью которого я могу получить доступ квторой последний элемент, использующий индексы.Любая помощь будет оценена.Заранее спасибо.

1 Ответ

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

Вы можете сохранить два последних элемента в массиве и распечатать второй последний элемент.

[...]
    char delim[] = ".";
    char *lastElement[2] = {0};  /* 1. To store delimited items */

    char *ptr = strtok(str, delim);

    while(ptr != NULL)
    {
        lastElement[0] = lastElement[1];  /* 2. Update */
        lastElement[1] = ptr;
        printf("'%s'\n", ptr);
        ptr = strtok(NULL, delim);
    }
    if(lastElement[0]) {  /* 3. Does second last item exist */
        printf("%s\n", lastElement[0]);  /* 4. Second last item */
    }
[...]

Проверить на ideone

Эта идея может быть расширена, чтобы получить любой произвольный элемент также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...