Как удалить символ char из его же массива

196
09 января 2019, 16:10

Всем привет. Есть такая задача : В Входном файле дается никнейм, нам надо, чтобы в таблице сортировки по имени этот ник стоял как можно ниже, притом удалить можно только один символ. Мой код:

ifstream in("input.txt");
ofstream out("output.txt");
string str;
char ch[str.size()],temp;
in >> str;
strcpy(ch, str.c_str());
temp=ch[0];             
for(int i=0;i<str.size();i++){  
if(ch[i] > temp){
delete ch[i];
break;
}   
else temp=ch[i];
}
string str2=ch;
out << str2; 

Мы смотрим, если второй символ ниже в алфавите первого, мы первый удаляем Компилятор указывает на одну единственную ошибку - delete ch[i]; Eroor:type 'char' argument given to 'delete', expected pointer Как быть?

Answer 1

delete не из той оперы...

Ваше delete ch[i]; следует развернуть в

for(int j = i+1; ch[j-1] = ch[j]; ++j);

Или воспользоваться memmove().

Answer 2

Слушайте, а что вы сдесь вообще делаете? Вот у вас есть некая переменная str, которая, как можно заключить из метода c_str() имеет тип std::string. Так зачем вы используете массив char? Не поймите меня неверно, я люблю Си, но вот зачем использовать функции из cstring в перемешку с классом string? Тем более что вы это делаете не верно. И раз уж у вас вопрос с меткой с++, то порекомендую сделать все через string (и правильно). Как то так:

ifstream in("input.txt");
ofstream out("output.txt"); 
std::string str;
// сдесь вы вообще брали у str size, который равен 0 на данный момент
in >> str; 
// две строки сдесь вообще не нужны - у вас дублирование данных
// далее вы в вопросе указали что нужно удалить первый символ, если он меньше второго, но почему то обходите всю строку, вместо того, чтобы сделать так:
if (str[0] < str[1]) 
  str.erase(str.begin());
else 
  str.erase(1);
out << str;

Обратите внимание, что не только код сократился, но и количество переменных тоже сократилось. Ровно до одной.

READ ALSO
Как сделать переменную в if, глобальной

Как сделать переменную в if, глобальной

Нужно сделать простейший калькулятор чтобы он работал с числовыми и строковыми значениямиОперации + - * /

159
Почему у меня вылетает программа когда я ввожу данные студента?

Почему у меня вылетает программа когда я ввожу данные студента?

Задача у меня была вот в чём: Создайте программу, имитирующую многоквартирный домНеобходимо иметь классы “Человек”, “Квартира”, “Дом”

209
Почему ошибка Run-Time Check Failure #2 - Stack around the variable &#39;var&#39; was corrupted.

Почему ошибка Run-Time Check Failure #2 - Stack around the variable 'var' was corrupted.

По завершению работы функции выдает ошибку

171
Поиск повторений через map

Поиск повторений через map

Решал задачу, суть которой было найти максимальное количество повторенийПосле решения задачи посмотрел предложенный вариант её решения

176