• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Usuwanie pojedynczego chara z wyrazu

Object Storage Arubacloud
0 głosów
293 wizyt
pytanie zadane 19 maja 2018 w C i C++ przez gagel Początkujący (310 p.)
edycja 19 maja 2018 przez gagel

Program powinien przyjmować na wejściu kilka linii sformułowanych "a aabbccdd" i na wyjsciu dawać "bbccdd". Po prostu usuwać z wyrazu wszystkie znaki jak ten który podaliśmy na początku. Znalazłem w internecie funkcję erase(), ale nie działa, najzwyczajniej nic się nie dzieje.

 

#include <iostream>
#include <string>

using namespace std;

string usuwanie(string x, int i){
    return x.erase (i,1);
}

int main()
{
    char c[10];
    string wyraz[10];


    for(int i = 0; i < 10; i++){
        cin >> c[i] >> wyraz[i];
        for(int j = 0; j < wyraz[i].length(); j++){
            if(wyraz[i][j] == c[i]){
                usuwanie(wyraz[i],j);
            }
            else continue;
        }
        cout << wyraz[i];
    }
    return 0;
}

Jeżeli ktoś byłby tak miły i pomógł mi rozwiązać ten problem to byłbym bardzo wdzięczny :)

2 odpowiedzi

0 głosów
odpowiedź 19 maja 2018 przez niezalogowany
wybrane 19 maja 2018 przez gagel
 
Najlepsza
#include <iostream>
#include <string>

using namespace std;

void usuwanie(string& x, int i) { // & daje oryginalny string, a nie kopię
	x.erase(i, 1);
}

int main()
{
	char c;
	string wyraz; 
	for (int i = 0; i < 10; i++) {
		cin >> c >> wyraz;
		for (int j = 0; j < wyraz.length(); j++) {
			if (wyraz[j] == c) {
				usuwanie(wyraz, j);
				j--; // po usunieciu literki następna do sprawdzenia spada na poprzednie miejsce, więc trzeba cofnąć iterator
			}
		}
		cout << wyraz << "\n";
	}
}

Można zrobić nawet lepiej znajdując wszystkie literki i przesuwając je na koniec stringa(remove) i dopiero wtedy usunąć wszystko od razu:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
	char c;
	std::string word;

	while (std::cin >> c >> word) {
		word.erase(std::remove(word.begin(), word.end(), c), word.end());
		std::cout << word << "\n";
	}
}
komentarz 19 maja 2018 przez gagel Początkujący (310 p.)
Bardzo dziękuję za pomoc i dobre wytłumaczenie :)
0 głosów
odpowiedź 19 maja 2018 przez Dexterim Dyskutant (8,370 p.)

Odpowiedź jest dość prosta bo operujesz na kopii w stringa w funkcji. Prototyp Twojej funkcji może wyglądać tak

void usuwanie(string& x, int i)

 

Aczkolwiek pojawia się problem  "ucinamy sobie gałąź na której siedzimy" 

komentarz 19 maja 2018 przez gagel Początkujący (310 p.)
Dziękuję za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 1,480 wizyt
pytanie zadane 23 listopada 2017 w PHP przez Zelek Użytkownik (960 p.)
0 głosów
2 odpowiedzi 196 wizyt
pytanie zadane 19 października 2019 w C i C++ przez Karolus Użytkownik (510 p.)
0 głosów
1 odpowiedź 775 wizyt
pytanie zadane 26 marca 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...