我需要我的程序获取一系列文件名(存储在单个“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);
}
显然,它没有完成。我正确地找到了文件的数量,但是在确定如何从源字符串中逐个分离并对其进行操作时,我有点迷失。
答案 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 */
}