C++builder实现读取文件中的数字

txt文件,内容如下x123y456z789(这样的行有几千行)要求输出为123456789谢谢了,怕吞分,等会再加了~~要求用标准c++语言,分别把3个数传递给3个不同... txt文件,内容如下
x123y456z789(这样的行有几千行)

要求输出为
123 456 789
谢谢了,怕吞分,等会再加了~~
要求用标准c++语言,分别把3个数传递给3个不同的参数
我现在会用面向过程的方法把文件内容读取到控制台,

我想知道面向对象的方法怎么实现,
最关键的就是如何提取每行中的3个数字

每行只有3个数,但是每个数的位数不定,10位之内,比如:
x123y23z64544
x123y456z789
展开
 我来答
百度网友aebc321
2011-08-13 · TA获得超过523个赞
知道小有建树答主
回答量:469
采纳率:95%
帮助的人:183万
展开全部
你要读10位以内的数,看来无论是整型还是长整型都不能满足要求,只能用浮点数了。我自己帮你写了函数,用C写的,还附上了应用方法,无论是不是以字母开头,也不管是不是以数字结尾,都可用,如输入:a1b2c3,1a2bc3d,1a123dfb325都可以。
#include<stdio.h>

void getnum(const char* str,double num[3])
{
num[0] = 0;
num[1] = 0;
num[2] = 0;
int i = 0;
int j = 0;
while(str[i] != '\0')
{
if(str[i] >= '0' && str[i] <= '9')//如果是数值则进行处理
{
num[j] = num[j]*10 + (str[i] - '0');
//如果后边的是字母,那这个数读完了
if(!(str[i+1] >= '0' && str[i+1] <= '9'))
{
j++;
}
}
i++;
}
}
int main()
{
char temp[100];
double a[3];
printf("输入一行含三组数字的字符串:");
scanf("%s",temp);
printf("输入的是:%s\n",temp);
getnum(temp,a);

//两种占位符都行,没有小数点后讨厌的0
printf("三个数是:%.f,%.f,%g\n",a[0],a[1],a[2]);
return 0;
}
zhjiemm
2011-08-11 · TA获得超过2643个赞
知道大有可为答主
回答量:1834
采纳率:75%
帮助的人:704万
展开全部
读文件你应该会的吧
1,先把文件中的每一行都读出来。
2,对单独的一行进行解析,
3,输出数值
4,循环读文件。

下倒是对一行进行解析:
#include <stdio.h>

char s[]="x123y456z789";

int x,y,z;
sscanf(s,"x%dy%dz%d",&x,&y,&z);

变量x,y,z读到的就是数值 ,直接输出就可以了。
追问
sscanf是什么函数哦
追答
是一个标准的库函数,可以从一个字符串中按格式取出对应的内容。
它和ssprintf是对应的,ssprintf把一定格式的内容输出到一个字符串中。
//-----------------------------------------------------------------------------------------
【Header File】
stdio.h
【Syntax】
int sscanf(const char *buffer, const char *format[, address, ...]);
【Description】
Scans and formats input from a string.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhykzhykzhyk
2011-08-12 · TA获得超过395个赞
知道答主
回答量:140
采纳率:100%
帮助的人:219万
展开全部
#include <iostream>
#include <vector>
using namespace std;
struct pos { int x,y,z; };
istream& operator>>(istream& i, pos& p)
{
char c;
return i>>c>>p.x>>c>>p.y>>c>>p.z;
}

vector<pos> read()
{
pos p;
vector<pos> v;
while (cin >> p) v.push_back(p);
return v;
}

int main()
{
vector<pos> v;
v = read();
for (int i = 0; i < v.size(); i++)
cout << v[i].x << " " << v[i].y << " " << v[i].z << endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iamcason
2011-08-11 · 超过28用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:67.5万
展开全部
#include <stdlib.h>
ofstream ofs("xxx.txt");//如果是指针类型的文件名,写成filename.c_str()
char *str; int x,y,z;
str = new char[4]; str[3] = '\0';
while(!ofs.eof()){
ofs.seekg(1, ios::cur);//文件中不能有空格,忽略开头的'x'
ofs.get(str, 3, 'y');//每个字母后面最多三个数字?
x = atoi(str);ofs.seekg(1,ios::cur);
ofs.get(str, 3, 'z'); y = atoi(str); ofs.seekg(1,ios::cur);
ofs.get(str, 3); z = atoi(str);
//调用你自己的函数
}
ofs.close();
具体情况具体再改。。
追问
每个字母后面的数字不一定,但在10位之内
我试一下你的方法,先谢谢了
另外文件有3k行,输出后显示不全,但是容器我不会用,麻烦你能帮我写个容器的例子吗
追答
我写的有问题,容器我也没接触过,不懂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式