【问题标题】:Iterating string with strchr in C在C中用strchr迭代字符串
【发布时间】:2017-01-29 08:57:33
【问题描述】:

如果我有一个像char str [] = "hello;people;how;are;you" 这样的字符串 并使用strchr(str,";") 如何获取字符串的第 N 个标记?

【问题讨论】:

    标签: c loops strchr


    【解决方案1】:

    好的,找到了strtok 的解决方案,我想使用strchr 对其进行转换。 Tokenizer 是静态变量,其中包含用于标记的字符。有什么想法吗?

    static const char *a(const char *string,int tkn) {
        char *tokenized=strdup(string);
        char *token;
        token=strtok(tokenized, tokenizer);
        int i=0;
        while(token != NULL) {
          if (i == (tkn-1)) {
            break;
          }
          token = strtok(NULL, tokenizer);
          i++;
       }
       return token;
    }
    

    【讨论】:

    • 这种方法是内存泄漏,因为分配的tokenized 肯定不能为以后的free() 恢复。
    • 非常感谢,毕竟我可以免费添加。除此之外?
    • "我毕竟可以添加一个 free" --> 代码返回一个指向分配内存的指针并不是那么简单,而是丢失了它的开头。建议发布一个使用您的“添加免费”想法的答案。
    • 删除strdup,直接在strtok中使用字符串,并强制转换为char *。
    • const char * 上使用strtok(string) 是未定义的行为。尝试对其进行编码,看看您启用良好的编译器是否会发出警告。
    【解决方案2】:

    假设您将 strchr 存储在 char * ch 中

    然后 ch-str+1 将返回您在 strchr 中查找的字符的位置

    使用预定义的子字符串函数或定义您自己的函数,您可以像这样创建一个 while 循环:

    i=0;
    while(ch != NULL)
    {
        printf("Your subsrting is : %s", substring_function(i,(ch-str+1)));
        i = ch-str+1;
        ch=strchr(ch+1,';');
    }
    

    【讨论】:

    • 感谢您的回答。我将使用 strchr ,它的参数是令牌,而不是位置 i。
    • 你没有在循环中改变ch,所以它是一个无限循环。
    • @polegar 这应该可以工作 strchr 采用两个参数,指针和您在字符串中查找的字符
    猜你喜欢
    • 2016-03-29
    • 2011-07-22
    • 2023-04-10
    • 1970-01-01
    • 2017-12-15
    • 2021-01-30
    • 1970-01-01
    • 2018-05-02
    • 2015-07-04
    相关资源
    最近更新 更多