c++如何将数字写入文件名中?
比如:stringstr="test.txt";stringstr2;intn=1;str2=n+str;可是这样它是把一个字符写入了字符串,而不是数字1.也许我没有讲清...
比如:string str="test.txt";
string str2;
int n=1;
str2=n+str;
可是这样它是把一个字符写入了字符串,而不是数字1.
也许我没有讲清楚我的意思 这样讲吧。我想创建100个文本文件 我想要它们的名称里有数字。最好就是1到100。比如m1.txt m2.txt ...m100.txt 展开
string str2;
int n=1;
str2=n+str;
可是这样它是把一个字符写入了字符串,而不是数字1.
也许我没有讲清楚我的意思 这样讲吧。我想创建100个文本文件 我想要它们的名称里有数字。最好就是1到100。比如m1.txt m2.txt ...m100.txt 展开
2016-07-11 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
方法:
1、文件操作需要用到头函数fstream;
2、用ifstream打开源文件,备读;
3、用ofstream打开目标文件,备写;
4、循环读取源文件;
5、用getline()函数,逐行读取源文件到字符串中;
6、用cout输出字符串到标准输出(屏幕);
7、把读到的字符输出到目标文件;
8、若读文件结束,结束循环;
9、关闭源文件和目标文件。
参考代码:
#include<iostream> //输入输出流
#include<fstream> //文件流头文件
using namespace std;
int main()
{
ifstream in("src.txt"); //源文件读
ofstream out( "obj.txt" ); //目标文件写
if (!in){
cout <<"open source file error!"<<endl;
return -1;
}
while( !in.eof() ) //文件未结束,循环
{
char str[1024];
in.getline(str,sizeof(str),'\n'); //读一行
cout << str << endl; //输出到屏幕
out<< str <<endl; //输出到文件
}
in.close();
out.close();
return 0;
}
1、文件操作需要用到头函数fstream;
2、用ifstream打开源文件,备读;
3、用ofstream打开目标文件,备写;
4、循环读取源文件;
5、用getline()函数,逐行读取源文件到字符串中;
6、用cout输出字符串到标准输出(屏幕);
7、把读到的字符输出到目标文件;
8、若读文件结束,结束循环;
9、关闭源文件和目标文件。
参考代码:
#include<iostream> //输入输出流
#include<fstream> //文件流头文件
using namespace std;
int main()
{
ifstream in("src.txt"); //源文件读
ofstream out( "obj.txt" ); //目标文件写
if (!in){
cout <<"open source file error!"<<endl;
return -1;
}
while( !in.eof() ) //文件未结束,循环
{
char str[1024];
in.getline(str,sizeof(str),'\n'); //读一行
cout << str << endl; //输出到屏幕
out<< str <<endl; //输出到文件
}
in.close();
out.close();
return 0;
}
展开全部
不知道你的数据来自哪里 不过我默认你是从某文件打开这些数据 然后将文件内容转换成数组 在这里 我帮你用的是二维数组 如果你不想用二维数组保存 可以修改一下 大体都一致的
另外,我用的方法中,读取文件用的是C语言的方法 其实和C++一样的 只不过后者是对象化的操作 你要是不想用C的 可以更改其中的文件操作函数成C++
最近在做编译器 对于文件的读写的各种操作都比较熟悉 今天无意中看到你的问题 随便就拿来做了 有些地方和过程可以更细化 不过我没时间 有什么不懂或者特别要求 可以直接找我 方式很简单 直接用百度的这个号给我发信息就行了
考虑到你的要求不够具体 我没有将最后的1 2 3什么的编号去掉 另外 我这个小程序可以读取所有这种数据格式 如果你要去掉最后的编号 可以自己加入去除代码或找我帮忙
还有一点提示你,以后如果要做这方面的工作,学会对文件的操作和各种不同样式的内容的特殊处理操作是很有很必要的 特别是编译器方面的工作 你可以学习编译原理这一门功课 它几乎汇集了各种文件操作和结构算法等等方面的知识 更是对计算机程序的一个深入
以下是代码(代码很简单短小 收集在一个文件中 直接用VC6建个C++的普通DOS工程粘贴过去就能运行了 另外 如果直接复制进VC6有混乱和无法识别的字符 请自己慢慢修改一下 把所有注释弄到一行中 在我这里是完全能够运行 并很美观的 如果还是不行 直接找我 我发文件给你)
///////////////////////////////////////
//////////////
//////////////2010-1-16 tt
//////////////
///////////////////////////////////////
#define MAX_H 10 //能够读取的最多行数
#define MAX_L 10 //能够读取的最多列数
#define MAX_NUM 10 //临时字符串数组最大值(可支持的小数点有效长度) 要求:以上三个数值必须大于或等于实际最大用量
#include<iostream>
using namespace std;
int main()
{
char file[100]; //打开文件目录变量
FILE *pfile;
cout<<"请输入你要打开的文件目录和文件名"<<endl;
cin>>file;
pfile=fopen(file,"r");
// pfile=fopen("1.txt","r"); //这里不必理会 如果注释掉前三行 再取消这行的注释 默认打开的文件就是工程目录下的1.txt
if(pfile==NULL)
else
{
float m_a[MAX_H][MAX_L]; //最终所有数据将保存进此二维数组中
int n=0; //临时的当前读到的字符串长度
int h=0; //对应的行
int l=0; //对应的列
char ch=getc(pfile); //开始读取第一个字符
while(ch!=EOF) //读取内容 直到文件结束
{
char str[MAX_NUM]=""; //格式化为浮点数前的临时字符串数组变量(此变量需要自动清空)
while(1) //这里可以自行更改 我定义成了无限循环(当然,下面有跳出循环语句,否则是死循环)
{ //此下的过程方法有几种 可以自己更改 这里用了最简单明了的一种
if(ch==' ') //当遇上空格时 停止读取
{
m_a[h][l]=atof(str); //并将读取到的内容用标准的字符串转换浮点数函数转换并保存进结果的二维数组中
n=0; //保存完成后 将字符串下标恢复到0
l++; //保存完成后 将二维数组中列数加1 等待下次的数据加入新列数组中
ch=getc(pfile); //读取下一字符
break; //退出循环 使得中间字符串归空
}
else if(ch=='\n') //当遇到回车时 (情况类同上面的遇上空格)
{
m_a[h][l]=atof(str);
n=0;
l=0;
h++; //这里的不同是 回车之后 要将二维数组的行数加1,就是前标前1
ch=getc(pfile);
break;
}
else if(ch==EOF)
{
m_a[h][l]=atof(str);
n=0;
l=0;
h++; //与回车不同的是 遇到结束符后 不再读取内容 也就没了getc操作了
break;
}
else //如果不是空格也不是回车也不是结束时量中
{
str[n]=ch; //将读取到的字符内容保存在临时的字符串中 等待遇上以上某种情况后处理并保存进数组变
ch=getc(pfile); //继续读取字符
n++; //字符串数组下标加1 以便下一字符加入进来
}
}
}
//以下用于测试结果`` //想有更多功能内容 应该在此后加入
for(int i=0;i<=6;i++)
{
for(int j=0;j<=8;j++)
{
cout<<m_a[i][j]<<" ";
}
cout<<endl;
}
fclose(pfile); //关闭读取的文件
}
return 0;
}
另外,我用的方法中,读取文件用的是C语言的方法 其实和C++一样的 只不过后者是对象化的操作 你要是不想用C的 可以更改其中的文件操作函数成C++
最近在做编译器 对于文件的读写的各种操作都比较熟悉 今天无意中看到你的问题 随便就拿来做了 有些地方和过程可以更细化 不过我没时间 有什么不懂或者特别要求 可以直接找我 方式很简单 直接用百度的这个号给我发信息就行了
考虑到你的要求不够具体 我没有将最后的1 2 3什么的编号去掉 另外 我这个小程序可以读取所有这种数据格式 如果你要去掉最后的编号 可以自己加入去除代码或找我帮忙
还有一点提示你,以后如果要做这方面的工作,学会对文件的操作和各种不同样式的内容的特殊处理操作是很有很必要的 特别是编译器方面的工作 你可以学习编译原理这一门功课 它几乎汇集了各种文件操作和结构算法等等方面的知识 更是对计算机程序的一个深入
以下是代码(代码很简单短小 收集在一个文件中 直接用VC6建个C++的普通DOS工程粘贴过去就能运行了 另外 如果直接复制进VC6有混乱和无法识别的字符 请自己慢慢修改一下 把所有注释弄到一行中 在我这里是完全能够运行 并很美观的 如果还是不行 直接找我 我发文件给你)
///////////////////////////////////////
//////////////
//////////////2010-1-16 tt
//////////////
///////////////////////////////////////
#define MAX_H 10 //能够读取的最多行数
#define MAX_L 10 //能够读取的最多列数
#define MAX_NUM 10 //临时字符串数组最大值(可支持的小数点有效长度) 要求:以上三个数值必须大于或等于实际最大用量
#include<iostream>
using namespace std;
int main()
{
char file[100]; //打开文件目录变量
FILE *pfile;
cout<<"请输入你要打开的文件目录和文件名"<<endl;
cin>>file;
pfile=fopen(file,"r");
// pfile=fopen("1.txt","r"); //这里不必理会 如果注释掉前三行 再取消这行的注释 默认打开的文件就是工程目录下的1.txt
if(pfile==NULL)
else
{
float m_a[MAX_H][MAX_L]; //最终所有数据将保存进此二维数组中
int n=0; //临时的当前读到的字符串长度
int h=0; //对应的行
int l=0; //对应的列
char ch=getc(pfile); //开始读取第一个字符
while(ch!=EOF) //读取内容 直到文件结束
{
char str[MAX_NUM]=""; //格式化为浮点数前的临时字符串数组变量(此变量需要自动清空)
while(1) //这里可以自行更改 我定义成了无限循环(当然,下面有跳出循环语句,否则是死循环)
{ //此下的过程方法有几种 可以自己更改 这里用了最简单明了的一种
if(ch==' ') //当遇上空格时 停止读取
{
m_a[h][l]=atof(str); //并将读取到的内容用标准的字符串转换浮点数函数转换并保存进结果的二维数组中
n=0; //保存完成后 将字符串下标恢复到0
l++; //保存完成后 将二维数组中列数加1 等待下次的数据加入新列数组中
ch=getc(pfile); //读取下一字符
break; //退出循环 使得中间字符串归空
}
else if(ch=='\n') //当遇到回车时 (情况类同上面的遇上空格)
{
m_a[h][l]=atof(str);
n=0;
l=0;
h++; //这里的不同是 回车之后 要将二维数组的行数加1,就是前标前1
ch=getc(pfile);
break;
}
else if(ch==EOF)
{
m_a[h][l]=atof(str);
n=0;
l=0;
h++; //与回车不同的是 遇到结束符后 不再读取内容 也就没了getc操作了
break;
}
else //如果不是空格也不是回车也不是结束时量中
{
str[n]=ch; //将读取到的字符内容保存在临时的字符串中 等待遇上以上某种情况后处理并保存进数组变
ch=getc(pfile); //继续读取字符
n++; //字符串数组下标加1 以便下一字符加入进来
}
}
}
//以下用于测试结果`` //想有更多功能内容 应该在此后加入
for(int i=0;i<=6;i++)
{
for(int j=0;j<=8;j++)
{
cout<<m_a[i][j]<<" ";
}
cout<<endl;
}
fclose(pfile); //关闭读取的文件
}
return 0;
}
追问
谢谢你,你的程序写的很好。你很用心。我希望我以后能向你请教c++问题。当然,你有什么问题我们可以一起探讨。只是我没有讲清楚我的问题吧。 正是lqqnjust 说的sprintf 。
可以这样用。 char tmp[20];
int i=1;
sprintf(tmp,"text_%d",i);
ofstream(tmp);
这样就可以生成带数字的txt文件名。
所以只能采纳lqqnjust了。还请见谅。真的希望能和你讨论C++问题。
我过几天再采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以去查下sprintf这个函数
更多追问追答
追问
也许我没有讲清楚我的意思 这样讲吧。我想创建100个文本文件 我想要它们的名称里有数字。最好就是1到100。比如m1.txt m2.txt ...m100.txt
追答
for(int i=0;i<=100;i++)
{
str s;
sprintf(s,"m%d.txt",i);
//s就是你想要的文件名
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strstream流 你去研究下这个
追问
也许我没有讲清楚我的意思 这样讲吧。我想创建100个文本文件 我想要它们的名称里有数字。最好就是1到100。比如m1.txt m2.txt ...m100.txt
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询