Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 拆分字符串并使用索引调用所需的元素_C_Split - Fatal编程技术网

C 拆分字符串并使用索引调用所需的元素

C 拆分字符串并使用索引调用所需的元素,c,split,C,Split,在python中,使用定义的分隔符拆分字符串,然后使用索引调用所需的元素是一项非常简单的工作。具体地说,从可变长度的列表中调用最后一个元素(因为给定的字符串在拆分后可能有很多元素),由于语法简单,这是一个棘手的问题 示例: str = "swscan.apple.com" str_list = str.split(".") print(str_list) print(str_list[-2]) 其结果将是: ['swscan', 'apple', 'com'] apple 'swscan'

在python中,使用定义的分隔符拆分字符串,然后使用索引调用所需的元素是一项非常简单的工作。具体地说,从可变长度的列表中调用最后一个元素(因为给定的字符串在拆分后可能有很多元素),由于语法简单,这是一个棘手的问题

示例:

str = "swscan.apple.com"
str_list = str.split(".")
print(str_list)
print(str_list[-2])
其结果将是:

['swscan', 'apple', 'com']
apple
'swscan'
'apple'
'com'
但是在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']
apple
'swscan'
'apple'
'com'

但这仍然不是一种结构化格式,我可以使用索引访问最后一个元素。任何帮助都将不胜感激。提前感谢。

您可以将最后两项存储在一个数组中,然后打印最后一项

[...]
    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 */
    }
[...]


这个想法也可以扩展到任何任意元素。

您想要任何任意元素还是总是倒数第二个元素?使用
strtok
循环初始化的指针数组怎么样?通过跟踪正在初始化的当前元素,您将知道循环后的“大小”,然后可以访问任意(且有效)元素。@MohitJain最后一个元素将是最合适的元素。虽然会有一个检查,看看这是否正是我想要的。但如果不是所需的元素,那么最后第三个元素可能就可以了。@如果我用strtok初始化数组指针,然后在打印元素的循环中,用数组指针和索引分配元素,这会有帮助吗。这能实现吗?这样,我的数组的总长度就是元素的数量,然后可以得到任意元素。我想这个问题的答案可能是你感兴趣的。那么,如果我创建一个大小为[3]的数组,那么得到最后第三个元素的可能性就存在了?此外,此代码是专门针对拆分后只有3个元素的字符串还是针对拆分后的“n”个元素数?它适用于
'n'
拆分后的元素数。