Тема: Видалення елементів із символьного масиву

Завдання.Видалити перші літери слів із рядка, рядок обов'язково має закінчуватися крапкою. Використати клас.
Є спосіб видалення елемента із масиву не створюючи додатковий масив ?
Правильно я видаляю елементи (void class_string::Delete_symbol()) чи є простіший спосіб ?

#include <conio.h>
#include <iostream>

using namespace std;

class class_string
{
private:
    char String[500];
public:
    bool Enter_string();
    void Delete_symbol();
}object;

bool class_string::Enter_string()
{
    cin.getline(object.String, 500);
    if (object.String[strlen(object.String) - 1] != '.')
    {
        cout << "Error! last character must be a point '.'";
        return false;
    }
    else
        return true;
}

void class_string::Delete_symbol()
{
    //Видалення першої літери слів
    char *cpy_String = new char[strlen(object.String)];
    strcpy(object.String, &object.String[1]);
    for (int i = 0; object.String[i + 1] != '\0'; i++)
    {
        if (object.String[i] == ' ')
            if (object.String[i + 1] == ' ')
                continue;
            else
            {
                strcpy(cpy_String, object.String);
                object.String[i + 1] = '\0';
                strcpy(cpy_String, &cpy_String[i + 2]);
                strcat(object.String, cpy_String);
            }
    }
    //Вивід інформації
    cout << object.String;
}

int main()
{
    if (!object.Enter_string())
    {
        getch();
        return 1;
    }
    object.Delete_symbol();
    getch();
    return 0;
}

2

Re: Видалення елементів із символьного масиву

Якщо "abcdefgh" - рядок (символьний масив з '\0' наприкінці), і треба видалити символи cde, причому
char *begin вказує на перший символ, що треба видалити ('c'), а *end - на перший, що видаляти не треба ('f'), то видаляти можно так:

strcpy( begin, end );

Ви або написали якусь маячню, або не сказали нам умови, бо про пробіл словами ніде не сказано, що із ним слід щось робити.
І якщо функція зветься Delete_symbol, то не варто у ній же виводити результат.

Подякували: Betterthanyou1

3

Re: Видалення елементів із символьного масиву

koala написав:

Ви або написали якусь маячню, або не сказали нам умови, бо про пробіл словами ніде не сказано, що із ним слід щось робити.

Завдання.Видалити перші літери слів із рядка, рядок обов'язково має закінчуватися крапкою. Використати клас.
Є рядок будь яких слів який обов'язково має закінчуватися крапкою наприклад "day early street car." програма має видалити перші букви рядка "ay arly treet ar." вона так і робить.

4

Re: Видалення елементів із символьного масиву

Прогальмував, вибачте. Перші літери слів, тепер ясно.
Тоді робите два індекси (чи два вказівники, що вам простіше) - перший позначає кінець "прорідженого" рядка, другий - початок "непрорідженого". На початку обидва вказують на String[0]. Другий рухається уздовж рядка, коли знаходить символ, який треба зберегти - копіює його в "проріджений" і зсуває перший. Додаткової пам'яті не треба, все всередині того ж рядка.

Подякували: Betterthanyou1