Форум программистов, компьютерный форум CyberForum.ru

Удалить из слова предыдущие вхождения последней буквы - C++

Восстановить пароль Регистрация
 
Locust
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 82
17.10.2013, 23:02     Удалить из слова предыдущие вхождения последней буквы #1
Вот, попыталась соорудить:
C++
1
word.replace(word[word.length - 1], word.empty()) + word[word.length - 1]
Компилироваться не хочет:
[BCC32 Error] Unit2.cpp(85): E2235 Member function must be called or its address taken
[BCC32 Error] Unit2.cpp(85): E2285 Could not find a match for 'string::replace(undefined,bool)'

Подскажите, пожалуйста, как можно исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 23:02     Удалить из слова предыдущие вхождения последней буквы
Посмотрите здесь:

Удалить подряд идущие вхождения слова в предложениях C++
Удалить из слова все буквы, совпадающие с последней буквой. C++
C++ Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения, то есть в слове должны остаться только различные буквы.
Дан текст. Напечатать его, преобразовав каждое слово по следующему правилу: удалить из слова все предыдушие вхождения последней буквы. C++
C++ Преобразовать каждое слово в строк, заменив в нем все предыдущие вхождения его последней буквы на символ «.»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,422
17.10.2013, 23:10     Удалить из слова предыдущие вхождения последней буквы #2
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
 
int main()
{
    std::string s = "eniki";
    char c = s.back();
    s.erase(s.find(c), 1);
    std::cout << s << std::endl;
}
Locust
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 82
18.10.2013, 00:00  [ТС]     Удалить из слова предыдущие вхождения последней буквы #3
[BCC32 Error] Unit2.cpp(87): E2316 'back' is not a member of 'string'

Добавлено через 3 минуты
Дурацкий вопрос: а можно как-то строку по одному символу считывать? Так и до последнего дойти можно.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,422
18.10.2013, 00:12     Удалить из слова предыдущие вхождения последней буквы #4
back стал методом string лишь в С++11
тогда так:
C++
1
char c = *s.rbegin();
Locust
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 82
18.10.2013, 00:46  [ТС]     Удалить из слова предыдущие вхождения последней буквы #5
Спасибо, помогло.

Только теперь вот такая штука: при тестировании удаляется только первое вхождение буквы в слово. Решила, что можно просматривать слово word.length()-1 раз, тогда при каждом проходе будет будет удаляться первая из нужных букв, так дойдём до конца. Сработало на простецком файле, содержащем в одну строчку dadad ablabl. С "dadad" всё как надо, а вот у "ablabl" удалился и последний символ.

Ещё один тестик выглядел так:

fdghdkfgdg ijffdf/vrrr
olokao.

В конце вылезают окна с воплями (окна прилагаются), открывается xstring internal header, а в нём выделяется строка _String_base::_Xran()
Что это значит? Где я накосячила и как исправлять?
Миниатюры
Удалить из слова предыдущие вхождения последней буквы  
Изображения
 
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,422
18.10.2013, 01:34     Удалить из слова предыдущие вхождения последней буквы #6
При количестве итераций цикла с телом
Цитата Сообщение от MrGluck Посмотреть сообщение
char c = s.back();
s.erase(s.find(c), 1);
std::cout << s << std::endl;
}
превышающим размер объекта std::string, идет вылет т.к. выходим за границы слова (пытаемся удалить букву из пустой строки). Если число итераций равно длине слова, то строка очищается, если меньше, то остаются буквы.

Добавлено через 12 секунд
Покажите код, которым тестируете
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 06:45     Удалить из слова предыдущие вхождения последней буквы
Еще ссылки по теме:

Преобразовать каждое слово в строке, удалив из него все вхождения первой буквы этого слова C++
Удалить из слова все повторяющиеся буквы, оставив их первые вхождения C++
Удалить все вхождения заданного слова из текста C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Locust
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 82
18.10.2013, 06:45  [ТС]     Удалить из слова предыдущие вхождения последней буквы #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void __fastcall TForm2::Button3Click(TObject *Sender)
{
    string word;
    char c;
    Memo1->Lines->Clear();
 
    while(!input.eof())
        {
            input.get(c);
            if(IsCharAlpha(c)&&input)
                word+=c;
            else
            {
                if(!((IsCharAlphaNumeric(c)&&input)||(ispunct(c)&&input)))
                {
                    char q = *word.rbegin();
                    for(int i=1;i<word.length()-1;i++)
                         word.erase(word.find(q), 1);
                    Memo1->Lines->Add(word.data());
                    word.clear();
                }
            }
        }
 
    input.close();
}
Yandex
Объявления
18.10.2013, 06:45     Удалить из слова предыдущие вхождения последней буквы
Ответ Создать тему
Опции темы

Текущее время: 12:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru