Всем привет. Есть такая задача : В Входном файле дается никнейм, нам надо, чтобы в таблице сортировки по имени этот ник стоял как можно ниже, притом удалить можно только один символ. Мой код:
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 Как быть?
delete не из той оперы...
Ваше delete ch[i]; следует развернуть в
for(int j = i+1; ch[j-1] = ch[j]; ++j);
Или воспользоваться memmove().
Слушайте, а что вы сдесь вообще делаете? Вот у вас есть некая переменная 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;
Обратите внимание, что не только код сократился, но и количество переменных тоже сократилось. Ровно до одной.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей