Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
87008 sh25_shenpy 拼音字母 C++ 运行出错 0 MS 224 KB 2343 2026-04-10 15:05:57

Tests(0/1):


#include <iostream> #include <string> #include <vector> #include <clocale> using namespace std; // 存储每个拼音首字母对应的起始GB2312编码 // 这些编码是从题目给出的表格中整理而来 const vector<pair<char, unsigned int>> pinyin_map = { {'A', 0xB0A1}, {'B', 0xB0C5}, {'C', 0xB2C1}, {'D', 0xB4EE}, {'E', 0xB6EA}, {'F', 0xB7A2}, {'G', 0xB8C1}, {'H', 0xB9FE}, {'J', 0xBBF7}, {'K', 0xBFA6}, {'L', 0xC0AC}, {'M', 0xC2E8}, {'N', 0xC4C3}, {'O', 0xC5B6}, {'P', 0xC5BE}, {'Q', 0xC6DA}, {'R', 0xC8BB}, {'S', 0xC8F6}, {'T', 0xCBFA}, {'W', 0xCDDA}, {'X', 0xCEF4}, {'Y', 0xD1B9}, {'Z', 0xD4D1} }; // 根据汉字的GB2312编码获取其拼音首字母 char get_first_letter(unsigned int hanzi_code) { for (size_t i = 0; i < pinyin_map.size(); ++i) { // 如果汉字编码大于等于当前区间的起始编码, // 并且小于下一个区间的起始编码,则属于当前区间 if (hanzi_code >= pinyin_map[i].second) { // 如果是最后一个区间,直接返回 if (i == pinyin_map.size() - 1) { return pinyin_map[i].first; } // 否则,检查是否小于下一个区间的起始编码 if (hanzi_code < pinyin_map[i + 1].second) { return pinyin_map[i].first; } } } return '-'; // 理论上不会执行到这里 } int main() { // 设置本地化环境,使程序能正确处理中文字符 setlocale(LC_ALL, "zh_CN.UTF-8"); int n; if (!(cin >> n)) return 0; // 读取n之后的换行符 cin.ignore(); for (int i = 0; i < n; ++i) { string line; getline(cin, line); string result = ""; // 遍历字符串,每次处理2个字节(一个汉字) for (size_t j = 0; j < line.length(); j += 2) { // 将两个字节合并为一个unsigned int,得到汉字的GB2312编码 unsigned int code = (static_cast<unsigned char>(line[j]) << 8) | static_cast<unsigned char>(line[j + 1]); char letter = get_first_letter(code); result += letter; } cout << result << endl; } return 0; }


测评信息: