Как удалить символ из одномерного массива?
Я только недавно познакомился с массивами, поэтому и вопрос дилетантский. Итак, я разбиваю строку "Hello, World!" на символьный массив, допустим, мне нужно убрать пробел. Я думал использовать Esc-последовательность '\b', но почему-то она затирает 2 символа.
using namespace std;
int main() {
char arr[13]{ 'H','e','l','l', 'o', ',', ' ', 'W', 'o','r', 'l', 'd', '!' };
int i, j;
for (i = 0; i < 13; i++) {
if (arr[i] == ' ') arr[i] = '\b';
}
for (j = 0; j < 13; j++) cout << arr[j];
return 0;
}
После этого в консоли получается "HelloWorld!". Не понимаю, почему удалились сразу ' ' и ',' . Подскажите пожалуйста, как универсально и эффективно затирать символы из массива?
Ответы (2 шт):
Ну смотрите, пробел вы уже убрали, так? Заменив его на backspace.
Получается, у вас Hello,<-World (<- - этот самый backspace)
Итог: выводится Hello, запятая, потом запятая затирается (при выводе!) и выводится World. Все, как вы попросили :)
А теперь - вам надо символ именно затирать при выводе или просто удалять из строки?
Есть такая функция - memmove(), которая умеет работать с перекрывающимися отрезками в памяти. Вот как убрать пробел в вашей строке:
char arr[] = "Hello, World";
memmove(arr+6,arr+7,strlen(arr+7)+1);