Удаление символов из массива символов в C++
Я пытаюсь создать способ удалить подстроку из строки. Он в форме символа, поэтому я не могу использовать удобные средства, которые радостно передаются строкам. Я знаю, как его искать, я могу найти указатель, но удаление человека из чарса было для меня чем-то вроде предприятия. Если у кого-то есть идеи, я был бы очень признателен. Благодарю.
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
char str[20];
char del[20];
char * delStorage;
char select(char);
int main()
{
cout << "Enter a string to the console." << endl;
cin >> str;
cout << "You inputted " << str << " for the string." << endl;
select(letter);
return 0;
}
char select(char letter)
{
cout << "Enter one of the following commands d for delete." << endl;
cin >> letter;
switch (letter)
{
case 'D':
case 'd':
cout << "Enter a string to delete." << endl;
cin >> del;
delStorage = strstr(str, del);
if (delStorage)
{
cout << del << " has been found. Deleting..." << endl;
delStorage.Replace(str, del, "");
}
break;
}
Я не могу использовать метод Replace, потому что он в характере. Я пробовал вложенный цикл, но застрял из-за несовместимости char
а также int
, Если у кого-то есть предложение, я весь в ушах. Еще раз спасибо сообществу Stack.
1 ответ
Не полный ответ, так как это похоже на домашнее задание, которое вы хотите решить самостоятельно. Вот решение с использованием низкоуровневых указателей, но вы можете адаптировать его для использования итераторов.
Держите левый указатель и правый указатель. Правильный указатель должен быть const char *
, Когда вы перебираете строку, если вы видите возможное начало подстроки, увеличивайте правый указатель, но не левый. если оказывается не подстрока (fog
не foo
), установите левый указатель на правый указатель и продолжайте поиск. Если это была подстрока, скопируйте строку, начинающуюся с правого указателя, которая теперь находится за концом подстроки, над подстрокой, в место, помеченное левым указателем. Если вы достигли конца строки, остановитесь.