как преобразовать строку c в общую строку?

#d

#d

Вопрос:

Это так просто, что мне неловко спрашивать, но как преобразовать строку c в строку d в D2?

У меня есть два варианта использования.

 string convert( const(char)* c_str );
string convert( const(char)* c_str, size_t length );
  

Ответ №1:

  1. Используйте std.string.toString(char*) (D1/Phobos) или std.conv.to !(строка) (D2):

     // D1
    import std.string; 
    ... 
    string s = toString(c_str);
    
    // D2
    import std.conv;
    ...
    string s = to!(string)(c_str);
      
  2. Срежьте указатель:

     string s = c_str[0..len];
      

    (вы не можете использовать «length», потому что оно имеет особое значение в синтаксисе slice).

Оба варианта вернут фрагмент поверх строки C (таким образом, ссылку, а не копию). Используйте свойство .dup для создания копии.

Обратите внимание, что строки D считаются в кодировке UTF-8. Если ваша строка в другой кодировке, вам нужно будет преобразовать ее (например, используя функции из std.windows.charset).

Комментарии:

1. toString не рекомендуется в D2.

2. @Caspin: Используйте to!string or text из std.conv модуля.

3. Строка IIRC неизменяема, поэтому для случая 2 вам нужно будет выполнить приведение (если вы знаете, что c-строка неизменяема или .idup для других случаев.

4. @The Elite: Да, это так, и если вам нравится C , вам следует взглянуть на D. (Имейте в виду, что экосистема на данный момент немного незрелая).

5. @CyberShadow, D1 не предлагает достаточных преимуществ перед c , чтобы привлечь мой интерес. В частности, меня заинтересовал синтаксис шаблона D2, и контейнеры на основе диапазона вместо итераторов, и …