2

我有一个包含 100 行和 512 列的文本文件,每列由一个选项卡分隔:

row1    00  00  20  00  11  00  00  00  00  10
        00  11  00  55  77  00  00  70  21  00
        90  ...

我想通读每一行并将值存储在数组的每一列中。

我不想使用sscanf和分离变量,因为它需要创建另外 500 个变量。
如果我使用fgets,我可以获得整行,但是如何用空格分隔列并将它们存储在数组中?

谢谢。

4

3 回答 3

4

您可以使用strtok_r的可重入版本strtok将字符串的元素分隔为标记。您可以strtok_r循环调用,调用atoi每个标记,并将标记添加到行的数组中。

strtok_r的使用模式几乎与 相同strtok,但它有一个额外的参数来表示分词器的当前状态。常规strtok将该状态保存在静态内存中,使函数不可重入。

const char *term = "\t\n\r "; // word terminators
char str[] = "quick brown fox jumps over the lazy dog";
char *state; // Invocation state of strtok_r
char *tok = strtok_r(str, term, &state); // First invocation is different
while (tok) {
        printf("%s\n", tok);
        tok = strtok_r(NULL, term, &state); // subsequent invocations call with NULL
}
于 2012-05-22T23:03:57.997 回答
1

我相信您可以使用带有制表符分隔符的字符串标记器。这是一个例子

于 2012-05-22T23:03:37.950 回答
1

你可以使用 strtok

http://www.cplusplus.com/reference/clibrary/cstring/strtok/

并遍历每个单词

于 2012-05-22T23:04:00.073 回答