试编写合适的类Ebook,实现一个电话通讯录,内含姓名和电话号码成员,可以按姓名拼音顺序将通讯录排序,设计必要的数据进行测试。c++
时间: 2024-10-29 13:18:23 浏览: 32
为了实现一个电话通讯录类Ebook,我们可以按照以下步骤:
```cpp
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
class Ebook {
private:
std::map<std::wstring, std::string> phoneBook; // 使用宽字符存储姓名,以便支持汉字拼音排序
std::wstring convertToPinyin(const std::wstring& name); // 拼音转换函数
public:
void addEntry(const std::wstring& name, const std::string& phoneNumber) {
phoneBook[name] = phoneNumber;
}
void sortByName() {
auto it = phoneBook.begin();
while (it != phoneBook.end()) {
auto nextIt = ++it;
if (comparePinyin(it->first, nextIt->first) > 0) {
std::swap(it->second, nextIt->second);
std::swap(it->first, nextIt->first);
it = phoneBook.erase(nextIt);
} else {
it++;
}
}
}
void displayEntries() const {
for (const auto& entry : phoneBook) {
std::wcout << "姓名: " << entry.first << ", 电话: " << entry.second << std::endl;
}
}
private:
int comparePinyin(const std::wstring& a, const std::wstring& b) const {
return std::lexicographical_compare(a.cbegin(), a.cend(), b.cbegin(), b.cend());
}
};
// 示例测试
int main() {
Ebook ebook;
ebook.addEntry(L"张三", "13800138000");
ebook.addEntry(L"李四", "13900139000");
ebook.addEntry(L"王五", "13600136000");
ebook.sortByName();
ebook.displayEntries();
return 0;
}
```
在这个示例中,`Ebook`类包含了一个电话簿(`std::map`),其中键是姓名(使用`std::wstring`处理中文字符),值是电话号码。`addEntry`方法用于添加联系人,`sortByName`方法使用自定义的比较函数`comparePinyin`对姓名进行拼音排序,然后更新电话簿。`displayEntries`用于打印所有联系人。
阅读全文