我总是像躲避瘟疫一样避免使用 strtok,我只在快速使用时才使用 *scanf 系列。
flex 并不难,就是这样:
%{
double entries[9];
int position = 0;
int error = 0;
%}
%%
-?[0-9]+(\.[0-9]+)? {if(position == 9) { error = 1; } else { sscanf(yytext,"%lf",entries[position]); position++; } }
\n {}
\r {}
\t {}
. {}
%%
然后我使用 include 创建一个更大的代码文件(我们只能提交一个)并且我计划提交预处理后的源代码(这将包含行宏并且仍然会给出有用/不错的错误 - 如果存在的话,归功于 GCC!)但它看起来不太好。
看来讲师要我们用strtok!所以我做了一些阅读,发现:http://www.cplusplus.com/reference/cstring/strtok/避免这种情况我并不感到难过。
我在这里学到了一个教训,当你有过 C++ 编程的工作,当你有编程经验时,不要认为“入门模块”会很容易。
我问的原因是因为我不确定输入文件的格式,它似乎显示 3 行数字,数字由空格分隔,这一切都很好,但它是\n 还是另一个(或者\r\n 我认为是用于 Windows 的?)
很好,已经有人问过了! Reading a 3x3 Matrix from a file an then displaying it in C所以我有一个如何做到这一点的答案。尽管如此,请帮我解决strtok?我觉得我应该能够在这样的模块中跳槽。
最佳答案
我不清楚,是否要填充 3x3 矩阵而不使用 strtok
?
构建您自己的函数,使用 strtod
很容易:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s = "1.1 2.1 3.1\r\n1.2 2.2 3.2\n1.3 2.3 3.3", *p = s;
double data[3][3];
int i = 0, n = 9;
for (i = 0; i < n; i++) {
data[0][i] = strtod(p, &p);
}
return 0;
}
适用于 \n
和 \r\n
因为 strtod
丢弃空白和 isspace
字符。
关于c - 如何使用 strtok 读取 3x3 矩阵 - 我使用了 flex 但我不确定是否允许提交预处理源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19835451/