2014-10-07 47 views
0

我正在研究一个最终将评估桥梁手的程序,但我在第一步中遇到了困难。我应该读取这样一个文件:从C++中的文件中为数据结构中的变量添加值

2C QD TC AD 6C 3D TD 3H 5H 7H AS JH KH 
3C 4C 2D AC QC 7S 7C TD 9C 4D KS 8D 6C 
2C 3C KC JC 4C 8C 7C QC AC 5C 9C 6C TC 
5H 3S 4D KC 9S 3D 4S 8H JC TC 8S 2S 4C 
2S 5D 6S 8S 9D 3C 2H TH 
2H 6D %S 8S 7S 4D 3H 4S KS QH JH 5C 9S 
2C QD TC AD 6C 3D TD 3C 5H 7H AS JH KD QS 
2C QD TC AD 6C 3D TD 2C 5D 7H AS JH KD 
2H 6D TS 8Z 7S 4D 3H 4S KS QD JH 5C 9S 

该文件中的每一行代表13手牌中的1手。正如你所看到的,有一些线路多于或少于13张卡,但是这应该在稍后用错误处理来处理。

我还需要一个数据结构以有组织的方式保存卡。我的问题是这样的:

我该如何将文件中的值赋给我的数据结构中的变量?我可能会推翻它,但是由于输入是成对的(第一个字符是值,第二个是套装),我真的被抛弃了。我非常确定,一旦我将卡(价值+花色)存储到数据结构中,我可以使用一系列存储卡将它们存储到手中,然后继续执行我的其余程序,我只是卡在数据中结构部分。

这里是我有什么样的代码至今:

struct hand { 
    char value; 
    char suit; 
}; 

int main() { 
    ifstream bridgeFile; 
    bridgeFile.open("prog3.dat"); 
    if(!bridgeFile) { 
     cerr << "Open Failure" << endl; 
     exit(1); 
    } 
    else { 
     cout << "File is open" << endl; 
    } 

    return 0; 
} 

任何帮助将不胜感激。

回答

1

替换cout << "File is open" << endl;符合这一解决方案,它应该把你的每一个“手”中的bridgeHands一个vector<hand>元素:

vector<vector<hand>> bridgeHands; 
string line; 
for(getline(bridgeFile,line);bridgeFile.good();getline(bridgeFile,line)){ 
    vector<hand> bridgeHand; 
    for(auto iter = line.begin();iter < line.end();iter += 2){ 
     hand handIter; 
     handIter.value = *iter; 
     ++iter; 
     handIter.suit = *iter; 
     bridgeHand.push_back(handIter); 
    } 
    bridgeHands.push_back(bridgeHand); 
} 

这可以通过添加operator<<struct hand,而不是由charchar阅读,希望你还没有得到一个坏的文件进行安全很多。

我不想花太多时间在这个原因上,它可能会使用一个改造,如果你使用enum来定义你的所有卡,并简单地读取每张卡的两个字符,你会做得更好。

0

我会倾向于一次读取这一个字符。会有一个运行fr 13迭代的for循环。每次迭代将读取3个字符。第一个将被翻译为如下表达式的值:

(c>'0'& & c < ='9')? c-'0':c =='J'? 10 ....

第二个字符类似于花色映射,第三个字符需要大部分时间空间,但最后一次迭代需要换行符。

+0

好吧,听起来很复杂大声笑 – 2014-10-07 10:31:17

1
  • 一次读完整行。
  • 如果串(即行)的长度!= 38(13 + 13 + 12space)抛出的错误,无法提供所有诉讼
  • 否则我= 0 & & while(i<lenghtOfLine) { value = line[i] ; suit = line [i+1] ; i=i+2; // Pass them to structures }

  • 阅读下一行,并重复

+0

这看起来不错。在//将它们传递给结构部分,我该怎么做呢? – 2014-10-07 11:06:17

+0

只需将它们分配给任何数据结构或数组,您已实现存储。 – mkkhedawat 2014-10-08 13:33:15