-
UID:77767
-
- 注册时间2009-04-15
- 最后登录2025-01-22
- 在线时间3553小时
-
- 发帖1296
- 搜Ta的帖子
- 精华2
- 金钱26976
- 威望2027
- 贡献值4
- 好评度2014
-
访问TA的空间加好友用道具
|
- #include <QDebug>
- #include <QTextCodec>
- #include <QApplication>
- #include <QWidget>
- #include <QLineEdit>
- #include <QLabel>
- #include <QPushButton>
- #include <QHBoxLayout>
- bool IsNumeric(const QString& str);
- bool IsChineseChar(const QString& oriStr);
- char Convert(wchar_t n);
- bool In(wchar_t start, wchar_t end, wchar_t code);
- QString GetChineseFirstChar(const QString& oriStr) {
- if(IsNumeric(oriStr)) {
- return "#";
- } else if(!IsChineseChar(oriStr) && !oriStr.isEmpty()) {
- return oriStr.at(0).toUpper();
- }
- QString strLastName;
- if(oriStr.length() > 1) {
- strLastName = oriStr.at(0);
- } else {
- strLastName = oriStr;
- }
- //
- QTextCodec *codec = QTextCodec::codecForName("GBK");
- QByteArray arr = codec->fromUnicode(strLastName);
- char chr[3];
- wchar_t wchr = 0;
- char* buff = new char[arr.length()/2];
- memset(buff, 0x00, sizeof(char)*arr.length()/2+1);
- for (int i = 0, j = 0; i < (arr.length()/2); ++i)
- {
- memset(chr, 0x00, sizeof(chr));
- chr[0] = arr[j++];
- chr[1] = arr[j++];
- chr[2] = '\0';
- // 单个字符的编码 如:'我' = 0xced2
- wchr = 0;
- wchr = (chr[0] & 0xff) << 8;
- wchr |= (chr[1] & 0xff);
- buff[i] = Convert(wchr);
- }
- QString strBuff(buff);
- delete [] buff;
- return strBuff.toUpper();
- }
- char Convert(wchar_t n)
- {
- if (In(0xB0A1,0xB0C4,n)) return 'a';
- if (In(0XB0C5,0XB2C0,n)) return 'b';
- if (In(0xB2C1,0xB4ED,n)) return 'c';
- if (In(0xB4EE,0xB6E9,n)) return 'd';
- if (In(0xB6EA,0xB7A1,n)) return 'e';
- if (In(0xB7A2,0xB8c0,n)) return 'f';
- if (In(0xB8C1,0xB9FD,n)) return 'g';
- if (In(0xB9FE,0xBBF6,n)) return 'h';
- if (In(0xBBF7,0xBFA5,n)) return 'j';
- if (In(0xBFA6,0xC0AB,n)) return 'k';
- if (In(0xC0AC,0xC2E7,n)) return 'l';
- if (In(0xC2E8,0xC4C2,n)) return 'm';
- if (In(0xC4C3,0xC5B5,n)) return 'n';
- if (In(0xC5B6,0xC5BD,n)) return 'o';
- if (In(0xC5BE,0xC6D9,n)) return 'p';
- if (In(0xC6DA,0xC8BA,n)) return 'q';
- if (In(0xC8BB,0xC8F5,n)) return 'r';
- if (In(0xC8F6,0xCBF0,n)) return 's';
- if (In(0xCBFA,0xCDD9,n)) return 't';
- if (In(0xCDDA,0xCEF3,n)) return 'w';
- if (In(0xCEF4,0xD188,n)) return 'x';
- if (In(0xD1B9,0xD4D0,n)) return 'y';
- if (In(0xD4D1,0xD7F9,n)) return 'z';
- return '\0';
- }
- bool In(wchar_t start, wchar_t end, wchar_t code)
- {
- if (code >= start && code <= end)
- {
- return true;
- }
- return false;
- }
- int GetChineseCode(const QString& oriStr) {
- QTextCodec *codec = QTextCodec::codecForName("GBK");
- QByteArray arr = codec->fromUnicode(oriStr);
- char chr[3];
- wchar_t wchr = 0;
- char* buff = new char[arr.length()/2];
- memset(buff, 0x00, sizeof(char)*arr.length()/2+1);
- for (int i = 0, j = 0; i < (arr.length()/2); ++i)
- {
- memset(chr, 0x00, sizeof(chr));
- chr[0] = arr[j++];
- chr[1] = arr[j++];
- chr[2] = '\0';
- // 单个字符的编码 如:'我' = 0xced2
- wchr = 0;
- wchr = (chr[0] & 0xff) << 8;
- wchr |= (chr[1] & 0xff);
- buff[i] = Convert(wchr);
- }
- return wchr;
- }
- bool IsChineseChar(const QString& oriStr)
- {
- QTextCodec *codec = QTextCodec::codecForName("GBK");
- QByteArray arr = codec->fromUnicode(oriStr);
- char chr[3];
- wchar_t wchr = 0;
- char* buff = new char[arr.length()/2];
- memset(buff, 0x00, sizeof(char)*arr.length()/2+1);
- for (int i = 0, j = 0; i < (arr.length()/2); ++i)
- {
- memset(chr, 0x00, sizeof(chr));
- chr[0] = arr[j++];
- chr[1] = arr[j++];
- chr[2] = '\0';
- // 单个字符的编码 如:'我' = 0xced2
- wchr = 0;
- wchr = (chr[0] & 0xff) << 8;
- wchr |= (chr[1] & 0xff);
- buff[i] = Convert(wchr);
- }
- QString strBuff(buff);
- return !strBuff.trimmed().isEmpty();
- }
- bool IsNumeric(const QString& str)
- {
- if(str.isEmpty()) {
- return false;
- }
- return str[0].isNumber();
- }
- class TestWidget : public QWidget
- {
- Q_OBJECT
- public:
- TestWidget();
- private slots:
- void convert();
- private:
- QLineEdit* input;
- QLabel* output;
- };
- TestWidget::TestWidget(): QWidget()
- {
- QHBoxLayout* layout = new QHBoxLayout(this);
- input = new QLineEdit(this);
- QPushButton* convertBtn = new QPushButton("=>", this);
- output = new QLabel(this);
- layout->addWidget(input);
- layout->addWidget(convertBtn);
- layout->addWidget(output);
- connect(convertBtn, SIGNAL(clicked()), this, SLOT(convert()));
- }
- void TestWidget::convert()
- {
- QString ch = GetChineseFirstChar(input->text());
- output->setText(ch);
- }
- int main(int argc, char** argv)
- {
- QApplication app(argc, argv);
- TestWidget win;
- win.show();
- return app.exec();
- }
- #include "main.moc"
|