avatar
p*s
1
需要读文件, 文件形式
abc dada 4 6 8 10 30 ...
dfa dfas 5 7 23 123 45 ...
...
每行前两个为字符串, 后面为数字, 要读进相应变量里.
我的方法, 先用getline读进一行, 再用sscanf读一行内的每个内容.
但现在有问题:
后面的数字很多, 用sscanf 必须 用同样多个 %d, 不太现实
更不现实的是后面的数字个数是不确定的, 没法用%d来实现, 因为不知道有多少个.
请问这个问题怎么解决. C++ 里用sringstram 能实现么?
多谢!
avatar
e*w
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 能实现么?

avatar
s*u
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) {

avatar
d*d
4
他用的真是很牛啊。
我去读了半天sscanf的manu,参数的最后一行是这个n的用法。
还从来没用。

【在 s****u 的大作中提到】
: scanf的正则这么牛的 -_-
: 只知道strtod

avatar
y*i
5
getline
boost::split
avatar
s*x
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) {

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。