头文件
#ifndef INITIAL_H
#define INITIAL_H
#include <string>
using namespace std;
/**
* @brief The Initial class
* get the initial letters of a Chinese string
*/
class Initial
{
public:
Initial();
~Initial();
char *GetIntial(string str);
private:
static char Convert(wchar_t n);
static bool Input(wchar_t start, wchar_t end, wchar_t code);
private:
char *m_buff;
};
#endif // INITIAL_H
cpp文件
#include "initial.h"
Initial::Initial()
{
m_buff = NULL;
}
Initial::~Initial()
{
if(m_buff != NULL)
{
delete m_buff;
}
}
char *Initial::GetIntial(string str)
{
char chr[3];
wchar_t wchr = 0;
m_buff = new char[str.length()/2];
memset(m_buff, 0, sizeof(char)*str.length()/2+1);
for(int i = 0, j = 0; i < (str.length()/2); ++i)
{
memset(chr, 0, sizeof(chr));
chr[0] = str[j++];
chr[1] = str[j++];
chr[2] = '\0';
wchr = 0;
wchr = (chr[0] & 0xFF) << 8;
wchr|= (chr[1] & 0xFF);
m_buff[i] = Convert(wchr);
}
return m_buff;
}
char Initial::Convert(wchar_t n)
{
if(Input(0xB0A1, 0xB0C4, n)) return 'a';
if(Input(0XB0C5, 0XB2C0, n)) return 'b';
if(Input(0xB2C1, 0xB4ED, n)) return 'c';
if(Input(0xB4EE, 0xB6E9, n)) return 'd';
if(Input(0xB6EA, 0xB7A1, n)) return 'e';
if(Input(0xB7A2, 0xB8c0, n)) return 'f';
if(Input(0xB8C1, 0xB9FD, n)) return 'g';
if(Input(0xB9FE, 0xBBF6, n)) return 'h';
if(Input(0xBBF7, 0xBFA5, n)) return 'j';
if(Input(0xBFA6, 0xC0AB, n)) return 'k';
if(Input(0xC0AC, 0xC2E7, n)) return 'l';
if(Input(0xC2E8, 0xC4C2, n)) return 'm';
if(Input(0xC4C3, 0xC5B5, n)) return 'n';
if(Input(0xC5B6, 0xC5BD, n)) return 'o';
if(Input(0xC5BE, 0xC6D9, n)) return 'p';
if(Input(0xC6DA, 0xC8BA, n)) return 'q';
if(Input(0xC8BB, 0xC8F5, n)) return 'r';
if(Input(0xC8F6, 0xCBF0, n)) return 's';
if(Input(0xCBFA, 0xCDD9, n)) return 't';
if(Input(0xCDDA, 0xCEF3, n)) return 'w';
if(Input(0xCEF4, 0xD188, n)) return 'x';
if(Input(0xD1B9, 0xD4D0, n)) return 'y';
if(Input(0xD4D1, 0xD7F9, n)) return 'z';
return '\0';
}
bool Initial::Input(wchar_t start, wchar_t end, wchar_t code)
{
if(code >= start && code <= end)
{
return true;
}
else
{
return false;
}
}