2014-02-26 56 views
0

爲什麼std :: setw()將特殊字符視爲兩個字符?有沒有簡單而時尚的方法來解決這個問題?std :: setw()將特殊字符視爲兩個字符

如:

#include <iostream> 
#include <iomanip> 

int main() 
{ 
    std::cout << std::left << std::setw(10) << "ok" << "ok" << std::endl; 
    std::cout << std::left << std::setw(10) << "test.." << "ok again" << std::endl; 
    std::cout << std::left << std::setw(10) << "®èé" << "fail" << std::endl; 

    return 0; 
} 

。OUPUTS:

ok  ok 
test.. ok again 
®èé fail 

下面是現場測試:http://ideone.com/q57I0H

+0

使用std的值:: wcout輸出寬字符 – Geoffroy

+0

我猜你正在使用utf8編碼。 gcc中有一個相關的錯誤。請點擊此處:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33852。您可以將所有字符串轉換爲wchar_t,並使用wcout。 – SHR

回答

0

他們兩個字符,檢查sizeof("®èé")