【问题标题】:how to get a sub string from a string separated by commas in C如何从C中用逗号分隔的字符串中获取子字符串
【发布时间】:2015-02-08 04:39:51
【问题描述】:

我想从编程语言C的数组中获取子数组

例如,如果我有一个 char 数组:

c[]= "Peter,peter911@hotmail.com,213342,IGE

d[]= "JohnSilva,johnsilva@hotmail.com,213342,ETI

问题是,我想要一个通用代码,当给定一个索引、一个数组和一个分隔索引的字符时,它会将以下索引(从逗号到另一个逗号)放入数组中。索引从 0 开始

示例:d[],index=1,分隔符:','

结果= johnsilva@hotmail.com

main(){
    char delimitador;
    char linha[100];
    int index;
    printf("index\n");
    scanf("%d",index);
    printf("char delimitador\n");
    scanf("%c",caractere);
    printf("linha"\n");
    scanf("%c",linha);
    char vector[50];
    int i=0;
    int contador;
    while(i!=index){
        contador++;
        if(c[contador]==delimitador){
            strncpy(vector,linha,contador-1);
            i++;
        }
    }
}

【问题讨论】:

  • 我们不会为您编写代码。你试过什么?
  • 对不起,我是新手:/ main(){ char delimitador;查林哈[100];整数索引; printf("索引\n"); scanf("%d",index); printf("字符分隔符\n"); scanf("%c",caractere); printf("linha"\n"); scanf("%c",linha); char vector[50]; int i=0; int contador; while(i!=index){ contador++ if(c[contador]= =delimitador){ strncpy(vector,linha,contador-1); i++; } } }
  • 我还不知道如何处理这个抱歉:/
  • @Joao Silva 与其发表评论,不如更新您的原始帖子。
  • 0) scanf("%d",index);..scanf("%c",caractere); --> scanf("%d", &index);..scanf("%c", &caractere);

标签: c substring arrays


【解决方案1】:

您可以使用 strtok 函数来标记给定的字符串。

有关更多信息,请访问给定的链接。 strtok()

【讨论】:

  • 这只是一个评论。如果您没有足够的声誉将 cmets 作为 comment 而不是 answer 发布,那么最好不要发表评论。
【解决方案2】:

可以使用Strtok函数。但是,如果您不熟悉该函数,则一个简单的逐字符读取字符串可能会有所帮助。检查这个:http://wethecomputerguys.com/2014/12/10/break-string-using-index-and-separator/ ..希望它对你有帮助..

【讨论】:

    【解决方案3】:
    #include <stdio.h>
    
    char *get_field(char *out_buff, const char *csv, int index, char separator){
        int i;
        char *p = out_buff;
        for(i=0; i < index && *csv; ++csv){
            if(*csv == separator)
                ++i;//count separator
        }
        if(i == index){
            while( *csv && *csv != separator )
                *p++ = *csv++;//cut out
        }
        *p = '\0';
        return out_buff;
    }
    
    int main(void){
        char d[]= "JohnSilva,johnsilva@hotmail.com,213342,ETI";
        char vector[50];
        get_field(vector, d, 1, ',');
        puts(vector);
        return 0;
    }
    

    【讨论】:

    • 不错的 +1。次要:也许i != index --> i &lt; index 以更好地应对不寻常的负面index
    • 当然。我还应该考虑到疯子想指定一个负字段号。 ;-)
    • SO 上的许多代码几乎没有问题。你的代码更好。您的帖子正确使用了size_tconst 和其他小细节。我认为很多人(理智和疯子)使用您的代码。您的代码需要以更高的标准工作。所以我建议您考虑这些小角落问题。
    【解决方案4】:

    阅读字符串解析,然后编写一个字符串解析函数,返回第 n 个逗号和下一个逗号之间的所有内容,然后使用 char *foo[] 形式的数组。

    字符串解析:获取逗号个数,选择需要的一个,获取两者之间的字符串,制作数组。

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多