c++斗地主记录在某年某月玩的记录
时间: 2023-09-04 22:12:13 浏览: 43
要实现在C++中读取某年某月玩的斗地主记录,需要进行以下几个步骤:
1. 定义一个文件读取流对象,使用`ifstream`类打开文件。
2. 读取文件内容,使用`getline`函数按行读取文件内容。
3. 对读取到的每一行进行解析,将字符串转换为牌的信息,并将牌局记录存储在数据结构中。
4. 遍历牌局记录,筛选出指定年月的记录,并输出。
以下是一个C++的示例代码,可以读取指定年月的斗地主记录:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
// 牌的结构体
struct Card {
int value; // 牌面大小,3-15,3-10表示 3-10,11表示 J,12表示 Q,13表示 K,14表示 A,15表示 2
char suit; // 花色,s 表示黑桃,h 表示红心,c 表示梅花,d 表示方块
};
// 从字符串中解析出牌的信息
Card parseCard(string str) {
Card card;
switch (str[0]) {
case '3': card.value = 3; break;
case '4': card.value = 4; break;
case '5': card.value = 5; break;
case '6': card.value = 6; break;
case '7': card.value = 7; break;
case '8': card.value = 8; break;
case '9': card.value = 9; break;
case '1': card.value = 10; break;
case 'J': card.value = 11; break;
case 'Q': card.value = 12; break;
case 'K': card.value = 13; break;
case 'A': card.value = 14; break;
case '2': card.value = 15; break;
default: break;
}
card.suit = str[1];
return card;
}
// 获取指定年月的牌局记录
vector<vector<Card>> getRecords(string filename, int year, int month) {
ifstream file(filename); // 打开文件
vector<vector<Card>> records; // 存储牌局记录
string line;
while (getline(file, line)) { // 逐行读取文件
size_t pos = line.find('-');
int y = stoi(line.substr(0, pos)); // 获取年份
int m = stoi(line.substr(pos + 1, 2)); // 获取月份
if (y == year && m == month) { // 筛选指定年月的记录
vector<Card> cards;
size_t start = pos + 4, end = line.find(' ', start);
while (end != string::npos) { // 按空格分割字符串
string str = line.substr(start, end - start);
Card card = parseCard(str); // 解析牌的信息
cards.push_back(card);
start = end + 1;
end = line.find(' ', start);
}
string str = line.substr(start);
Card card = parseCard(str); // 解析最后一张牌的信息
cards.push_back(card);
records.push_back(cards);
}
}
file.close(); // 关闭文件
return records;
}
int main() {
vector<vector<Card>> records = getRecords("record.txt", 2021, 8); // 获取2021年8月的牌局记录
for (auto& cards : records) { // 输出牌局记录
for (auto& card : cards) {
cout << card.value << card.suit << " ";
}
cout << endl;
}
return 0;
}
```
在示例代码中,我们定义了一个`getRecords`函数用于获取指定年月的牌局记录。在函数中,我们使用`getline`函数按行读取文件内容,并使用`find`函数和`substr`函数获取每行牌局记录的年份和月份。然后,我们筛选出指定年月的记录,并按空格分割字符串,解析出每张牌的信息,存储在`vector<vector<Card>>`类型的数据结构中。最后输出指定年月的牌局记录即可。