与.txt中数据的统计有关解决思路
与.txt中数据的统计有关
有一组数据的.txt文件,上万行,如下形式:
3 1
3 1
2 1
2 2
2 2
2 2
2 1
2 1
3 2
1 1
2 1
2 1
1 1
1 1
目的是统计出1 1的个数n1,
1 2和2 1的个数总和n2,
1 3和3 1的个数总和n3.....
1 5和5 1的个数总和n5
2 2的个数n6
2 3和3 2的个数总和n7
...........
(这里1 2和2 1,1 3和3 1看做是相同的),然后求每组的个数占总数的比例,如:总和为n=n1+n2+n3+...,比例为n1/n,n2/n.....
------解决方案--------------------
感觉用map可以实现
一个思路:
写入map时,用串表示,"1 1","1 3"作为map的string值,并设一个int作为map的另一项
若读入"3 1",时,对换变成"1 3"(比较前后大就可以了)
有关map的统计方法,看以前我回过你的贴
http://topic.****.net/u/20100423/20/de5e9b70-dc9c-4f6a-87e2-b57871150bbf.html
------解决方案--------------------
可以变换一次,把前后两个数的和 跟差的绝对值取出来,值相同的可以累加1.然后统计。如:1 3的和是4 差绝对值是2;3 1的和同样是4 差的绝对值也是2
------解决方案--------------------
粗略写了个,数据的位数可以不受限。
但数据之间的分隔只能用一个空格。
有一组数据的.txt文件,上万行,如下形式:
3 1
3 1
2 1
2 2
2 2
2 2
2 1
2 1
3 2
1 1
2 1
2 1
1 1
1 1
目的是统计出1 1的个数n1,
1 2和2 1的个数总和n2,
1 3和3 1的个数总和n3.....
1 5和5 1的个数总和n5
2 2的个数n6
2 3和3 2的个数总和n7
...........
(这里1 2和2 1,1 3和3 1看做是相同的),然后求每组的个数占总数的比例,如:总和为n=n1+n2+n3+...,比例为n1/n,n2/n.....
------解决方案--------------------
感觉用map可以实现
一个思路:
写入map时,用串表示,"1 1","1 3"作为map的string值,并设一个int作为map的另一项
若读入"3 1",时,对换变成"1 3"(比较前后大就可以了)
有关map的统计方法,看以前我回过你的贴
http://topic.****.net/u/20100423/20/de5e9b70-dc9c-4f6a-87e2-b57871150bbf.html
------解决方案--------------------
可以变换一次,把前后两个数的和 跟差的绝对值取出来,值相同的可以累加1.然后统计。如:1 3的和是4 差绝对值是2;3 1的和同样是4 差的绝对值也是2
------解决方案--------------------
粗略写了个,数据的位数可以不受限。
但数据之间的分隔只能用一个空格。
- C/C++ code
#include <iostream> #include <fstream> #include <string> #include <map> #include <iomanip> using namespace std; int main() { map<string,int> myMap; // 数据字符串及对应个数 ifstream infile("data.txt"); string tmp; // 每行读取的临时字符串 int count = 0; // 总行数 while(getline(infile,tmp)) { size_t pos = tmp.find(' '); // 找到空格的位置 string str1 = tmp.substr(0,pos); // 切割出第一个数 string str2 = tmp.substr(pos+1,tmp.size()); // 切割出第二个数 string tmpStr1 = str1+ " " +str2; string tmpStr2 = str2+ " " +str1; // 检查记录是否已经存在并增加其计数 if(myMap.end()!=myMap.find(tmpStr1)) { myMap[tmpStr1]++; count++; } else { myMap[tmpStr2]++; count++; } } map<string,int>::iterator iter; for(iter = myMap.begin();iter!=myMap.end();iter++) // 遍历并输出数据及其对应比例 { cout << "data: " << setw(10) << iter->first << " "; cout << "count: " << setw(5) << iter->second << " "; cout << "scale: " << (double)iter->second/count << endl; } infile.close(); return 0; }