Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление символа из строки [C++] 
:(
    Опции темы
ArniLand
Дата 31.3.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Нужно в этой программе создать метод который удаляет символ из строки и чтобы результат удаления выводился на экран, как сделать удалению символа из строки не понимаю. Помогите пожалуйста дописать это в программе


Код программы:
Код

//Row.h
#pragma once
#include "stdafx.h"
#include <string>
#include <iostream>

using namespace std;

class Row
{
public:
    string dataRow;
    Row();
    Row(string);
    string ToString();
};

//Row.cpp
#include "Row.h"


Row::Row()
{
}

Row::Row(string str)
{
    dataRow = str;
}
string Row::ToString()
{
    string str = "";
    for (int i = 0; i < dataRow.length(); i++)
    {
        str = str + " " + dataRow[i];
    }
    return str;
}

//text.h
#pragma once
#include "stdafx.h"
#include "Row.h"
const int countRows = 100;

class Texts
{
public:
    
    Texts();
    void addRow(string str);
    void removeRow(int numberRow);
    void removeAll();
    string getMaxLenghtRow();
    string ToString();
    Row texte[100];
    int amountRows;
};


//text.cpp
#include "text.h"
#include "stdafx.h"

Texts::Texts()
{
    amountRows = 0;
}
void Texts::addRow(string str)
{

    texte[amountRows].dataRow = str;
    
    amountRows++;
}
void Texts::removeRow(int numberRow)
{
    for (int i = numberRow; i < (countRows - 1); i++)
    {
        texte[i] = texte[i + 1];
    }
    texte[countRows - 1].dataRow = "";
    amountRows--;
}
void Texts::removeAll()
{
    
    for (int i = 0; i < countRows; i++)
    {
        texte[i].dataRow = "";
    }
    amountRows = 0;
}



string Texts::ToString()
{
    string str = "";
    for (int i = 0; i < amountRows; i++)
    {
        str = str + " " + texte[i].dataRow;
    }

    return str;
}
string Texts::getMaxLenghtRow()

    string max = texte[0].dataRow;
    for (int i = 1; i < amountRows; i++)
    {
        if (texte[i].dataRow.length() > max.length())
        {
            max = texte[i].dataRow;
        }
    }

    return max;

}


//main.cpp
#include "text.h"


void main()
{
    cout<<"Vvedit kilkist ryatkiv: ";
    
    int countRow;
    
    cin>>countRow;
            
    cout<<"Vvedit ryadki: ";
    
    Texts objText;
    
    
    string temp;

    for (int i = 0; i < countRow; i++)
    {
        
        cin>>temp;
        objText.addRow(temp);
    }
    
    cout<<"------------------\n\n"<<objText.ToString()<<"\n------------------\n";

    cout<<"\nVvedit nomer ryadka dlya vudalennya: ";
    
    int numberOfRow;
    
    cin>>numberOfRow;
     
    if (numberOfRow < countRow)
    {
        
        objText.removeRow(numberOfRow - 1);
    }

    cout<<"------------------\n\n"<<objText.ToString()<<"\n------------------\n";

    cout<<"\nNaydovshiy ryadok v teksti: " + objText.getMaxLenghtRow();

    

    cout<<"\nOchischennya texty.";
    
    objText.removeAll();
    cout<<"------------------\n\n"<<objText.ToString()<<"\n------------------\n";
}


Это сообщение отредактировал(а) ArniLand - 31.3.2010, 19:34
PM MAIL   Вверх
toxx
Дата 31.3.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Перекопировать всё до этого символа, потом всё после этого символа.
У меня чтото похожее в векторе есть(удаляет элемент массива по номеру k, работает не всегда)
Код

Vector<T>& Vector<T> ::erase(int k)
{
    k-=1;
    Vector buf=*this;
    for(int i=0;i<n;i++)
    {
        if(i!=k)buf[i]=V[i];
        else 
        {
            buf[i]=V[i+1];
            k++;
        }
    }
    n-=1;
    delete V;
    V=new T[n];
    for(int i=0;i<n;i++)
        V[i]=buf[i];
    return *this;
}



Это сообщение отредактировал(а) toxx - 31.3.2010, 23:14
PM MAIL   Вверх
ИванМ
Дата 31.3.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



у класса string есть стандартный метод erase. Самый простой вариант - первый параметр индекс символа, начиная с которого будет удаляться, второй параметр количество удаляемых символов
PM MAIL   Вверх
djamshud
Дата 31.3.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Можо dataRow хранить в char* и тогда символ удалится при помощи сдвига куска памяти с помощью memmove.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Alca
Дата 1.4.2010, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

у класса string есть стандартный метод erase.

глянь его исходник


--------------------
PM WWW ICQ Skype Jabber   Вверх
Egeni
Дата 21.6.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



Цитата
у класса string есть стандартный метод erase. Самый простой вариант - первый параметр индекс символа, начиная с которого будет удаляться, второй параметр количество удаляемых символов



я бы хотел попродробнее узнать про такой метод и про сдвиг памяти memmove

какой из вариантов более безотказен при больших файлах? чтобы потом не повисло?
PM MAIL   Вверх
bsa
Дата 21.6.2010, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Egeni, тебе с файлами надо это делать или просто со строками?
PM   Вверх
stat007
Дата 21.6.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Код

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string st;
    cout<<"Enter string: "<<endl;
    getline(cin, st);

    cout<<"\nYour enter string:"<<endl;
    cout<<st<<endl;

    st.erase(5, 2);

    cout<<st<<endl;

    system("pause");
    return 0;
}



PM MAIL   Вверх
djamshud
Дата 1.7.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



>и про сдвиг памяти memmove

http://linux.die.net/man/3/memmove

>какой из вариантов более безотказен при больших файлах? чтобы потом не повисло?

Если двигать внутри файла, то read в буфер не очень большого размера, write в нужное смещение, и так несколько раз, пока весь файл не передвинится. Еще можно замапить файл в один кусок памяти и сделать memmove на нем - самое простое и эффективное, но не кроссплатформенное решение.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Egeni
Дата 2.7.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



Цитата

"замапить файл в один кусок памяти"


можно пример?
PM MAIL   Вверх
djamshud
Дата 2.7.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39





--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.