Удаление символов из массива символов в 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), установите левый указатель на правый указатель и продолжайте поиск. Если это была подстрока, скопируйте строку, начинающуюся с правого указателя, которая теперь находится за концом подстроки, над подстрокой, в место, помеченное левым указателем. Если вы достигли конца строки, остановитесь.

Другие вопросы по тегам