逗号划界C.

时间:2012-12-02 23:46:42

标签: c

我需要我的程序获取一系列文件名(存储在单个“String”中并用逗号分隔)并对它们进行操作。

伪代码将是:

for each filename in some_string
    open filename
    operate on contents of filename
    close filename

问题是我将some_string(“filename1,filename2,...,filenamen”)分成[filename 1],[filename 2],... [filename n]。

编辑:为了澄清,保持some_string完整并根据需要提取每个文件名似乎更简单,这正是我试图做的。

我的代码,就目前而言,非常笨重(而且非常恶心......)

int j = 0;
char *tempS = strdup(filenames);
while (strchr(tempS, ',')) {
    char *ptr = strchr(tempS, ',');
    *ptr++ = '.';
    numFiles++;
}

for (; j < numFiles; j++) {
    char *ptr = strchr(tempS, ',');

    //don't know where to go from here...
    fin = openFile(tempS);
    if (fin != NULL) {
        //do something
    }
    fclose(fin);
}
显然,它没有完成。我正确地找到了文件的数量,但是在确定如何从源字符串中逐个分离并对其进行操作时,我有点迷失。

3 个答案:

答案 0 :(得分:1)

通常在C中拆分字符串时,使用C标准库中的strok()函数。

#include <string.h>
...
char *token;
char *line = "string1,string2,string3";
char *search = ",";

token = strtok(line, search);

token = strtok(NULL, search);

答案 1 :(得分:1)

您可以将strtok用于此

char *fname = strtok(tempS, ",");
while (fname != NULL) {
    /* process filename */
    fname = strtok(NULL, ",");
}

strtok一个接一个地用逗号分隔字符串。

答案 2 :(得分:0)

strtok()不是多线程安全的。如果这对您很重要,您应该使用strtok_r()。例如:

    char *savedptr = NULL /* to be passed back to strtok_r in follow-on calls */
    char *tempS = strdup( some_string ); /* to keep your original intact */
    char *fname = strtok_r(tempS, ",", savedptr);
    while (fname != NULL) {
        /* process fname ... */
        fname = strtok_r(NULL, ",", savedptr); /* pass savedptr back to strtok_r */
    }