小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

寬字符串和標準字符串的互相轉(zhuǎn)換

 just_person 2012-03-30
本篇文章主要介紹寬字符串和標準字符串的互相轉(zhuǎn)換,對中文處理非常有用,標準字符串如果想輸出一個單漢字需要連續(xù)輸出兩個字節(jié),比較麻煩,下面給出一個完整的轉(zhuǎn)換程序,希望對看到本文章的人有幫助!

#include <iostream>
#include <string>
#include <locale>
using namespace std;

struct auto_setlocate {
  auto_setlocate() {
 setlocale(LC_ALL, "chs");
    }
};

string WstringToString(const wchar_t* wch) {
    auto_setlocate as;
    string ret(wcslen(wch)*2, '\0');
    wcstombs(const_cast<char*>(ret.c_str()), wch, ret.length());
    return ret;
}

string WstringToString(const wstring& wstr) {
    auto_setlocate as;
    string ret(wstr.length()*2, '\0');
    wcstombs(const_cast<char*>(ret.c_str()), wstr.c_str(), ret.length());
    return ret;
}

wstring StringToWstring(const char* ch) {
    auto_setlocate as;
    wstring ret(strlen(ch)/2, '\0');
    mbstowcs(const_cast<wchar_t*>(ret.c_str()), ch, strlen(ch));
    return ret;
}

wstring StringToWstring(const string& str) {    
    auto_setlocate as;
    wstring ret(str.length()/2, '\0');
    mbstowcs(const_cast<wchar_t*>(ret.c_str()), str.c_str(), str.length());
    return ret;
}

int main() { 
// 都輸出“中 中華人民共和國” ***janvyking999***
  wcout.imbue(locale("chs"));

// 函數(shù)string WstringToString(const wchar_t* wch)
  wchar_t* wct = L"中華人民共和國";
  wcout<<wct[0]<<" "<<wct<<endl;
  string str1 = WstringToString(wct);
  cout<<str1[0]<<str1[1]<<" "<<str1<<endl;

// 函數(shù)string WstringToString(const wstring& wstr)
  wstring wstr = L"中華人民共和國";
  wcout<<wstr[0]<<" "<<wstr<<endl;
 string str2 = WstringToString(wstr);
  cout<<str2[0]<<str2[1]<<" "<<str2<<endl;

// 函數(shù)wstring StringToWstring(const char* ch)
  char* chr = "中華人民共和國";
 cout<<chr[0]<<chr[1]<<" "<<chr<<endl;
 wstring wstr2 = StringToWstring(chr);
 wcout<<wstr2[0]<<" "<<wstr2<<endl;

// 函數(shù)wstring StringToWstring(const string& str)
 string str3 = "中華人民共和國";
  cout<<str3[0]<<str3[1]<<" "<<str3<<endl;
  wstring wstr1 = StringToWstring(str3);
 wcout<<wstr1[0]<<" "<<wstr1<<endl;

  return 0;
}

關(guān)于函數(shù)setlocale。

本函數(shù)用來配置地域的信息。參數(shù) category 有下列的選擇:

  LC_ALL 包括下面的全項選項都要。

  LC_COLLATE 配置字符串比較,PHP 目前尚未實作出來本項。

  LC_CTYPE 配置字符類別及轉(zhuǎn)換。例如全變大寫 strtoupper()。

  LC_MONETARY 配置金融貨幣,PHP 目前尚未實作。

  LC_NUMERIC 配置小數(shù)點后的位數(shù)。

  LC_TIME 配置時間日期格式,與 strftime() 合用。

  而參數(shù) locate 若是空字符串 "",則會使用系統(tǒng)環(huán)境變量的 locate 或是 LANG 的值。若 locate 為零,則不會改變地域化配置。返回新的地域,若系統(tǒng)尚未實作則返回 false。

另外,關(guān)于strlen,wcslen和lstrlen。

strlen() 返回ANSI字符串長度; 
wcslen() 返回寬字符串長度(一般為UNICODE); 
lstrlen() 該函數(shù)返回指定字符串的字節(jié)長度(ANSI版)或字符長度(雙字節(jié)標準版);其中不包括終止NULL字符?!±?/p>

#include <iostream>
#include <string>
#include <locale>
using namespace std;

int main() { 
  
 wchar_t* wct = L"中華人民共和國";
 wstring wstr = L"中華人民共和國";
  char* ch = "中華人民共和國";
 string str = "中華人民共和國";

  cout<<wcslen(wct)<<endl;
  cout<<wstr.length()<<endl;
 cout<<strlen(ch)<<endl;
 cout<<str.length()<<endl;

 return 0;
}  //程序結(jié)果輸出7,7,14,14

 關(guān)于wcstombs和mbstowcs函數(shù)請參考MSDN。

 size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );

mbstr:   The address of a sequence of multibyte characters

wcstr:   The address of a sequence of wide characters

count:   The maximum number of bytes that can be stored in the multibyte output string 

 size_t  mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );

wcstr:   The address of a sequence of wide characters

mbstr:   The address of a sequence of multibyte characters

count:   The number of multibyte characters to convert

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多