2010-06-27 2 views
1

я иметь аа массив символов в C++, которые, как lõoke { 'A', 'B', 'C', 0,0,0,0}C++ ищет String.Replace()

теперь им wrting его к потоку, и я хочу, чтобы он появился как «abc» с четырьмя пробелами, установленными нулевым . Я использую std :: stiring, и у меня также есть boost. как я могу сделать это в C++

основно я думаю, что им ищет что-то вроде

char hellishCString[7] = {'a','b','c',0,0,0,0}; // comes from some wired struct actually... 
std::string newString(hellishCString, sizeof(hellishCString)); 

newString.Replace(0,' '); // not real C++ 

ar << newString; 
+0

Может ли 'std :: string' содержать внедренные нулевые символы? Другим вариантом может быть использование 'std :: vector'. – dreamlax

+1

@dreamlax: Да, они могут. – sbi

+0

@dreamlax: Да, они могут. Длина строки сохраняется независимо, поэтому нет необходимости в нулевом завершении, а нулевые символы не обрабатываются специально. – Philipp

ответ

10

Использование std::replace:

#include <string> 
#include <algorithm> 
#include <iostream> 

int main(void) { 
    char hellishCString[7] = {'a','b','c',0,0,0,0}; // comes from some wired struct actually... 
    std::string newString(hellishCString, sizeof hellishCString); 
    std::replace(newString.begin(), newString.end(), '\0', ' '); 
    std::cout << '+' << newString << '+' << std::endl; 
} 
+0

Ошибка ошибка C2782: 'недействительным станд :: заменить (_FwdIt, _FwdIt, Const _Ty &, Const _Ty &)': параметр шаблона '_Ty' неоднозначен –

+0

моя ошибка, я попытался: станд :: заменить (groupString .begin(), groupString.end(), 0, ''); и 0, очевидно, ... –

1

еще одно решение, если заменить массив вектором

#include <vector> 
#include <string> 
#include <algorithm> 
#include <iostream> 


char replaceZero(char n) 
{ 
    return (n == 0) ? ' ' : n; 
} 

int main(int argc, char** argv) 
{ 
    char hellish[] = {'a','b','c',0,0,0,0}; 
    std::vector<char> hellishCString(hellish, hellish + sizeof(hellish));  
    std::transform(hellishCString.begin(), hellishCString.end(), hellishCString.begin(), replaceZero); 
    std::string result(hellishCString.begin(), hellishCString.end()); 
    std::cout << result; 
    return 0; 
} 
Смежные вопросы