帮我看看这个c++小程序吧,我看不懂
admin 发表于 2010-08-28 | 来源:互联网 | 阅读:
帮我讲解讲解这个c++程序吧,尽可能详细点,因为我才开始学c++,呵呵,谢谢–
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("aaa.txt");
for(string s;getline(in,s);)
{
int a,sum=0;
for(istringstream sin(s);sin>>a;sum+=a);
cout<<sum<<endl;
}
}
aaa.tet文件内容为:
12 3 45 67 8 9
56 232 12 23
12 1
8
1212 2312

ifstream 是个文件流,把文件打开,getline把文件流里的东西按行输入,到s string里。istringstream是个string流,可以把s里的数据按照空格分开,一次输入一个。所以这个程序就是把文件里的数据累加
C/C++ code
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("aaa.txt");
for(string s;getline(in,s);) //先读入一行字符串,放入s中
{
int a,sum=0;
for(istringstream sin(s);sin>>a;sum+=a); //把s放入字符串流中,然后,当s中还有内容时就不断地输给a(变成了int),sum+=a
cout < <sum < <endl; //最后输出总和
}
}
//stringstream可以用来转换数字和字符串,具体的你再搜索一下
同意楼上的
[code=C/C++][/code]#include <iostream> #include <sstream> #include <fstream> using namespace std; int main() { ifstream in("aaa.txt"); //这里的in是什么意思?for(string s;getline(in,s);) //这里的in又是什么意思?{ int a,sum=0; for(istringstream sin(s);sin>>a;sum+=a); cout < <sum < <endl; } }
ifstream in("aaa.txt"); //这里的in是什么意思? 定义了一个ifstream的对象,并初始化为aaa文件for(string s;getline(in,s);) //这里的in又是什么意思? 从ifstream对象in中按行读取内容并存放在s中
ifstream in("aaa.txt"); //这里的in是什么意思? 定义了一个ifstream的对象,并初始化为aaa文件 for(string s;getline(in,s);) //这里的in又是什么意思? 从ifstream对象in中按行读取内容并存放在s中也就是说这里的两个in可以同时换成相同的别的东西了,比如x,是吗?
C/C++ code
for(istringstream sin(s);sin>>a;sum+=a); //这里的>>是什么意思呢?
去看看一看输入输出流的资料吧,GOOGLE,是一个很好 的工具…有时学习的方法很重要
C/C++ code
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("aaa.txt"); //ifstream是读入,需要的头文件是fstream,in是自己命名的,aaa.txt放在源文件的目录中
for(string s;getline(in,s);) //string s自定义一个字符串s,getline(in,s)表示从in中读入一行放进s中
{
int a,sum=0;
for(istringstream sin(s);sin>>a;sum+=a); //istringstream sin(s) 表示从字符串s中输入,sin也是自己命名的,和上面的in类似,sin>>a从s中
cout < <sum < <endl; //读入一个数给a
}
}
但是我还是不明白,代码中的两个循环是怎样跳出的,请高手解惑?
for(string s;getline(in,s);) 当getline得不到东西(也就是到了该文件的文件末尾)时就跳出来了for(istringstream sin(s);sin>>a;sum+=a);当sin>>a出现错误(也就是sin为空时)就跳出来了
文件流读取。
高手们,这个问题已经解决,目的就是为下面这个程序,后来我用字符串(其实它也是一种数组)数组到到了将字符倒置的目的,并利用循环得出了文件中每行二进制所对应的十进制数—–我把程序贴出来,给大家看看C/C++ code
#include<iostream>
#include<sstream>
#include<fstream>
#include<string>
#include<cmath>
using namespace std;
void main()
{
double sum=0;
int flag=0,tt=0;
ifstream w("aaa.txt");
for(string s;getline(w,s);)
{
for(int i=s.length()-1;i>=0; i–)
{
if(s[i-1]==’-'&&s[i]==’1′)
{
tt=1;
break;
}
if(s[i]==’0′)
{
flag++;
}
if(s[i]==’1′)
{
sum=sum+pow(2,flag);
flag++;
}
}
if(tt==1)
break;
cout.precision (20);
cout<<sum<<endl;
sum=0;
flag=0;
}
}
其中的aaa.txt文件的内容是:0101001000011111011111011011001100101111111001111110000000100000000000000001111111110101010010101010010100000001111100100001-1最后输出的结果为:184924582623264510878459494412433
引用楼主 huxiaolong930 的帖子:帮我讲解讲解这个c++程序吧,尽可能详细点,因为我才开始学c++,呵呵,谢谢– #include <iostream> #include <sstream> #include <fstream> using namespace std; int main() { ifstream in("aaa.txt"); //打开文件aaa.txtfor(string s;getline(in,s);) //getline函数获得文件的每一行输入。{ int a,sum=0; for(istringstream sin(s);sin>>a;sum+=a); //利用istringstream将每一行中分割成一个个string ,并将每一个string当作int输出。cout < <sum < <endl; //sum将输出的int累加} } 大概意思就这样
呵呵,这应该是钱能书上的转换二进制数啊,看懂啦,向楼主学习。