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

标签 c split

用定义的分隔符拆分字符串,然后使用索引调用所需的元素在 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'

但这仍然不是一种结构化格式,我可以通过这种格式使用索引访问倒数第二个元素。任何帮助,将不胜感激。提前致谢。

最佳答案

您可以将最后两项存储在数组中并打印倒数第二项。

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

Check on ideone

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

关于c - 拆分字符串并使用索引调用所需的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52962040/

相关文章:

javascript - 正则表达式 vs split 来剪切 javascript 中的字符串

r - 拆分和处理嵌套列表

r - 执行计算时将单个数据框行拆分为多行

c - Visual Studio C 语法着色问题

c - 使用 gstreamer souphttpsrc 的基本身份验证

c - 缓冲区溢出还存在吗?

java - Java中如何分割多行字符串

c++ - OpenCV : convert the pointer in memory to image

c - 无法使用 gdk_pixbuf_loader 加载 TIFF 图像

java - 正则表达式仅针对非转义字符进行分割