2016-04-21 3 views
-2

Я пишу код в C++, где я есть входную строку, которая идет какКак заменить^М с пустым пространством С ++

\ п {^ М «ид»: «два»,^М «GUID ": "49709bb3-7444-40bf-9032-cc65e36d26f5"^M "IsActive": правда,^М
"баланс": "1645,00"^M "картинка":" http://placehold.it/32x32 "^ M
" возраст ": 28,^М "имя": "Эльвира Од"^M "гендер": "женская",^М
"компания": "Homelux",

У меня нет контроля над входной строкой.

Мне нужно напечатать эту строку, которая хранится в p1f0-> str, в файл и проанализировать ее для других целей.

Но символ^M испортит вещи во время разбора, и, следовательно, я хотел бы избавиться от него.

Итак, для того, чтобы избавиться от символов^M, я делаю это, и это не Рабоче

struct specialStr { 
    uint32 len; 
    char str[0]; 
} 
specialStr p111; 
p111.... 
.... 
std::string raww = (char*) p111->str; 
boost::replace_all(raww, "^M", " "); 
strncpy(p111->str, raww.c_str(), sizeof(raww)); 
p111->len = (uint32) (raww.size()); 
p111->str[p111->len - 1] = 0; 

Но, похоже, не будет никакого эффекта.

Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно? Спасибо

+0

Что вы имеете в виду? То, что я вставил, не было скомпилированным кодом. Это всего лишь образец фрагмента! – VictorCreator

+0

'p111-> str' имеет размер' 0' ... – LPs

+1

Что это такое: 'std :: string raww = (char *) p111-> str;' ??? – LPs

ответ

2

Последовательность ^M - это как ваш редактор отображает управляющий код M, код ASCII 13: ПЕРЕВОЗКА ПЕРЕВОЗКИ.

Вы можете легко кодировать его как "\r" в C или C++.

+0

Отлично. Это направление, в котором я ожидал, что обсуждение начнется. Спасибо за ваш комментарий. Я понимаю, что^M - возврат каретки окон 0x0D 0x0A. Но как я могу заменить это пробелами, поэтому я просто избавляюсь от всех^M. Это возможно? – VictorCreator

+0

CR - 0x0D (0x0A - это строка перевода, в текстовых файлах Windows CR + LF обозначается символом новой строки, но это, вероятно, не связано. Это может объяснить, как вы попали в бродячие CR aka^M chars) – sehe

+0

Gotcha. >> Вы можете легко закодировать его как «\ r» на C или C++. Как это сделать? У меня нет возможности изменить свой ввод, но я могу редактировать/заменять символы на той строке, которую я получаю (с помощью^M). Как кодировать это как \ r? Что-то вроде этого? std :: replace (raww.begin(), raww.end(), '^ M', ''); Но это не работает. :( – VictorCreator

Смежные вопросы