p***s 发帖数: 78 | 1 需要读文件, 文件形式
abc dada 4 6 8 10 30 ...
dfa dfas 5 7 23 123 45 ...
...
每行前两个为字符串, 后面为数字, 要读进相应变量里.
我的方法, 先用getline读进一行, 再用sscanf读一行内的每个内容.
但现在有问题:
后面的数字很多, 用sscanf 必须 用同样多个 %d, 不太现实
更不现实的是后面的数字个数是不确定的, 没法用%d来实现, 因为不知道有多少个.
请问这个问题怎么解决. C++ 里用sringstram 能实现么?
多谢! | e*****w 发帖数: 144 | 2 C:
int x, n;
while (sscanf(line, "%d%n", &x, &n) == 1) {
// x is good
line += n;
}
C++:
int x;
std::istringstream is(line);
while (is >> x) {
// x is good
}
【在 p***s 的大作中提到】 : 需要读文件, 文件形式 : abc dada 4 6 8 10 30 ... : dfa dfas 5 7 23 123 45 ... : ... : 每行前两个为字符串, 后面为数字, 要读进相应变量里. : 我的方法, 先用getline读进一行, 再用sscanf读一行内的每个内容. : 但现在有问题: : 后面的数字很多, 用sscanf 必须 用同样多个 %d, 不太现实 : 更不现实的是后面的数字个数是不确定的, 没法用%d来实现, 因为不知道有多少个. : 请问这个问题怎么解决. C++ 里用sringstram 能实现么?
| s****u 发帖数: 118 | 3 scanf的正则这么牛的 -_-
只知道strtod
【在 e*****w 的大作中提到】 : C: : int x, n; : while (sscanf(line, "%d%n", &x, &n) == 1) { : // x is good : line += n; : } : C++: : int x; : std::istringstream is(line); : while (is >> x) {
| d*******d 发帖数: 2050 | 4 他用的真是很牛啊。
我去读了半天sscanf的manu,参数的最后一行是这个n的用法。
还从来没用。
【在 s****u 的大作中提到】 : scanf的正则这么牛的 -_- : 只知道strtod
| y****i 发帖数: 156 | | s*********x 发帖数: 1923 | 6 刚刚碰到和楼主一样的问题,准备用emacsnw推荐的c++试试。
【在 e*****w 的大作中提到】 : C: : int x, n; : while (sscanf(line, "%d%n", &x, &n) == 1) { : // x is good : line += n; : } : C++: : int x; : std::istringstream is(line); : while (is >> x) {
|
|