天天看點

Windows 8 C++/CX字元串

在C++/CX裡面是使用Platform::String類來表示字元串的類型,在windows運作時的接口和方法中,需要使用Platform::String來作為字元串參數的傳遞。如果需要使用标準C++的字元串類型如wstring或者string的時候,可以将Platform::String與标準的C++的字元串進行互相的轉換。

String類型的構造

String類型表示的是char16的字元串,可以直接通過字元串的指派來進行構造也可以使用标準C++的wchar_t*指針進行構造。

// Initializing a String^ by using string literals  

    String^ str1 = "Test"; // ok for ANSI text. uses current code page  

    String^ str2("Test");  

    String^ str3 = L"Test";  

    String^ str4(L"Test");  

    //Initialize a String^ by using another String^  

    String^ str6(str1);  

    auto str7 = str2;  

    // Initialize a String from wchar_t* and wstring  

    wchar_t msg[] = L"Test";  

    String^ str8 = ref new String(msg);  

    std::wstring wstr1(L"Test");  

    String^ str9 = ref new String(wstr1.c_str());  

    String^ str10 = ref new String(wstr1.c_str(), wstr1.length()); 

字元的操作

String提供了相關的方法來操作字元串,其中可以使用String::Data()方法來傳回一個String^ 對象的wchar_t*指針。

// Concatenation   

    auto str1 = "Hello" + " World";  

    auto str2 = str1 + " from C++/CX!";      

    auto str3 = String::Concat(str2, " and the String class");  

    // Comparison  

    if (str1 == str2) { /* ... */ }  

    if (str1->Equals(str2)) { /* ... */ }  

    if (str1 != str2) { /* ... */ }  

    if (str1 < str2 || str1 > str2) { /* ... */};  

    int result = String::CompareOrdinal(str1, str2);  

    if(str1 == nullptr) { /* ...*/};  

    if(str1->IsEmpty()) { /* ...*/};  

   // Accessing individual characters in a String^  

    auto it = str1->Begin();  

    char16 ch = it[0]; 

String類型的轉換

String類型可以和标準C++的wstring進行互相的轉換

// compile with: /ZW  

#include <string> 

using namespace std;  

using namespace Platform;  

int main( array<String^>^ args )   

{  

    // Create a String^ variable statically or dynamically from a   

literal string.   

    String^ str1 = "AAAAAAAA";  

    // Use the value of str1 to create the ws1 wstring variable.  

    wstring ws1( str1->Data() );   

    // The value of ws1 is L"AAAAAAAA".  

    // Manipulate the wstring value.  

    wstring replacement( L"BBB" );  

    ws1ws1 = ws1.replace ( 1, 3, replacement );  

    // The value of ws1 is L"ABBBAAAA".  

    // Assign the modified wstring back to str1.   

    str1 = ref new String( ws1.c_str() );   

    return 0;  

本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1078189