首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

与.txt中数据的统计有关解决思路

2012-02-21 
与.txt中数据的统计有关有一组数据的.txt文件,上万行,如下形式:3 13 12 12 22 22 22 12 13 21 12 12 11 11

与.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.csdn.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;} 

热点排行