ofstream — удаление символа нулевой ширины в c ++?

Я работаю над файлом C ++ и столкнулся с интересной проблемой.
Я выводить строки в текстовый файл (с использованием ofstream), и у меня есть следующие строки.

void InstructionWriter::outputLabel(string s){
string sLabel;
sLabel = s;
sLabel.erase(remove(sLabel.begin(), sLabel.end(), ' '),sLabel.end());

sLabel = "(" + function + "$" + sLabel + ")\n" ;
outputFile << sLabel;
}

Проблема в том, что во время вывода TXT-файла.

Когда я направляюсь к текстовому файлу, в котором был запущен outputLabel, выделение строки подсчитывает символы +1 символа. что +1 «невидим». Выделение строки не выберет ее. Единственный способ исправить это — начать удаление справа. После того, как вы нажмете «)», я замечу, что снова нажал «Удалить», но курсор не двигался, и кажется, что ничего не было удалено.

Я думаю, что это скрытый символ нулевой ширины, но я не знаю, как вычеркнуть это из строки, у кого-нибудь есть какие-нибудь идеи по поводу того, на какие функции смотреть?

@ smac89

terminate called after throwing an instance of 'std::length_error'
what():  basic_string::_M_replace
0

Это то, что терминал бросил в меня после выполнения команды, которую вы упомянули.

0

Решение

Все, я был в состоянии понять это.

согласно комментарию Smacs, я загрузил выходной текстовый файл в бинарный редактор. как ни странно, я нашел 0D перед символом новой строки, который я вставил вручную.

Я использовал замену регулярного выражения в строке, и теперь он не добавляет этот символ 0D в строку.

Спасибо за все советы.

0

Другие решения

Вместо sLabel.erase(remove(sLabel.begin(), sLabel.end(), ' '),sLabel.end()); пожалуйста попробуйте это:

std::string from = " ", to = "";
size_t start_pos = 0;
while ((start_pos = sLabel.find(from, start_pos)) != std::string::npos) {
sLabel.replace(start_pos, from.length(), to);
start_pos += to.length();
}

Потому что строка в кодировке UTF-8; и вы не можете полагаться на отдельные байты. Манипулировать только подстроки.

0

По вопросам рекламы [email protected]