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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Locust
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 82
#1

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

17.10.2013, 23:02. Просмотров 751. Ответов 6
Метки нет (Все метки)

Вот, попыталась соорудить:
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++ Преобразовать каждое слово в строк, заменив в нем все предыдущие вхождения его последней буквы на символ «.»
Преобразовать каждое слово в строке, удалив из него все вхождения первой буквы этого слова C++
Удалить из слова все повторяющиеся буквы, оставив их первые вхождения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6218 / 3463 / 423
Регистрация: 29.11.2010
Сообщений: 9,176
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
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6218 / 3463 / 423
Регистрация: 29.11.2010
Сообщений: 9,176
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
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6218 / 3463 / 423
Регистрация: 29.11.2010
Сообщений: 9,176
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++ Строки (перестановка 1 и последней буквы каждого слова)
Удалить вхождения первой буквы в словах предложения 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     Удалить из слова предыдущие вхождения последней буквы
Ответ Создать тему
Опции темы

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