C++编程,从TXT文档中读取数字

比如说TXT文档两行如下:flkasjlkj12kflasjlk15lkgajkl53klgsaj35我想读取其中的数字,我写的代码是:#include<iostream... 比如说TXT文档两行如下:
flkasjlkj 12 kflasjlk 15
lkgajkl 53 klgsaj 35
我想读取其中的数字,我写的代码是:
#include<iostream>
#include<fstream>

using namespace std;

int main()
{
ifstream infile("save.txt");
int a,b,c,d;
infile >> a >> b>>c>>d;
cout<<a<<b<<c<<d;
return 1;
}
但是读取的int全都是没有意义的,怎么样写才能把12 15 53 35分别赋给a b c d?
展开
 我来答
一生吥胜
推荐于2017-11-24 · TA获得超过208个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:133万
展开全部
#include <iostream>
#include <string>
#include <vector>
#include<fstream>
#include <sstream>
using namespace std;
// 判断一个字符串是否为一个数字,如果是返回它
bool JudgeNum(string str,int& iTmp)
{
 bool bNum = true;
 string::size_type szSize = str.size();
 for (int i=0;i<szSize;++i)
 {
  char ch = str.at(i);
  if ((ch < '0') || (ch > '9'))
  {
   bNum = false;
   break;
  }
 }
 if (bNum)
 {
  istringstream iss(str);
  iss >> iTmp;
 }
 return bNum;
}
int main()
{
 ifstream infile("F:\\save.txt");
 int a,b,c,d;
 vector<int> iVec;
 string strTmp;
 int iTmp = 0;
 if (!infile)
 {
  return -1;
 }
 while(getline(infile,strTmp,' '))    // 以空格为分隔符,读取每一个词
 {
  if (JudgeNum(strTmp,iTmp))
  {
   iVec.push_back(iTmp);
  }
 }
 vector<int>::size_type stCnt = iVec.size();
 if (stCnt >= 4)
 {
  a = iVec.at(0);
  b = iVec.at(1);
  c = iVec.at(2);
  d = iVec.at(3);
  cout << a << " " << b << " " << c << " " << d;
 }
 getchar();
 return 1;
}

这个可以获取到文本中任意的数字,但文本里的数字与其他字符之间必须有空格分隔,仅供参考!

其他情况,LZ可自行参考修改。这里只提供个思路.

cqdjyy01234
2013-11-06 · TA获得超过1147个赞
知道小有建树答主
回答量:267
采纳率:50%
帮助的人:305万
展开全部

可以一个字符一个字符检查,读取连续的数字,然后转化为数字。

#include<fstream>
#include<iostream>
#include<string>
#include<algorithm>

int main(){
    std::ifstream istr("test.txt");
    if(istr.is_open()){
        std::string tmp;
        while(getline(istr, tmp)){
            std::string::const_iterator p, q = tmp.begin(), end = tmp.end();
            
            while((p = find_if(q, end, isdigit)) != end){//查看该行是否还有数字
                q = find_if_not(p, end, isdigit);//查找最后一个不是数字的位置
                std::cout<<stoul(tmp.substr(distance(tmp.cbegin(), p), distance(p, q)))<<" ";//将p~q的字串转化为数字
            }
        }
    }
    
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cjj796
2013-11-06 · TA获得超过8709个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3457万
展开全部

你好!!

    因为你的文件内含有字符串,所以不能这样读取

程序改了,你看看吧,满意请采纳

#include<iostream>
#include<fstream> 

using namespace std;

int main()
{
ifstream infile("save.txt"); 
string a1,b1,c1,d1;   // 读取4个字符串 
int a,b,c,d;          // 读取4个数字 
infile >> a1 >> a >> b1 >> b >> c1 >> c >> d1 >>d;
cout<<a<<b<<c<<d;
return 1;
}
追问
这样对这个例子来说是可以了!不过我碰到的实际情况是两个数字之间有不固定的字符,不知道这样的情况怎么解决?
追答
那你就把实际文件内容发上来,你这样来问,谁知道怎么处理
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式