1

{'a'、'b'、'c'、0,0,0,0}のようなC++のchar配列があります

今それをストリームに書き込んでいて、nullの代わりに4つのスペースがある「abc」のように表示したいのですが、私は主にstd :: stiringを使用しており、ブーストもあります。どうすれば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;
4

2 に答える 2

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;
}
于 2010-06-27T08:22:04.987 に答える
1

配列をベクトルに置き換える場合のもう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;
}
于 2010-06-27T11:12:38.963 に答える