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

Spoj - Skracanie identyfikatorów.

0 głosów
149 wizyt
pytanie zadane 12 sierpnia 2020 w SPOJ przez Arek04 Użytkownik (530 p.)
zmienione kategorie 12 sierpnia 2020 przez ScriptyChris

Witam. Usiłuję zrobić to zadanie: https://pl.spoj.com/problems/WI_IDEN/. W testach ciągle wychodzi jakiś błąd, a ja już nie mam pojęcia co jest nie tak. Z góry dzięki za pomoc :)

#include <iostream>
#include <string>
using namespace std;
int main()
{
	int dlug;
	string nazwa;
	cin >> dlug >> nazwa;
	if (nazwa.size() <= dlug) cout << nazwa;
	else
	{
		for (int i = 0; i < nazwa.size(); i++) //od konca usuwamy znaki nie bedace literami i cyframi
		{
			size_t poz;
			poz = nazwa.find_last_not_of("$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz1234567890");
			if (poz != string::npos)
			{
				nazwa.erase(poz, 1);
				if (nazwa.size() == dlug) cout << nazwa;
			}
			else break;
		}
		for (int i = 0; i < nazwa.size(); i++)//od konca usuwamy kolejne cyfry
		{
			size_t poz;
			poz = nazwa.find_last_of("1234567890");
			if (poz != string::npos)
			{
				nazwa.erase(poz, 1);
				if (nazwa.size() == dlug) cout << nazwa;
			}
			else break;
		}
		for (int i = 0; i < nazwa.size(); i++)//od drugiej litery usuwamy kolejne samogloski
		{
			size_t poz;
			poz = nazwa.find_first_of("AEIOUYaeiouy");
			if (poz != string::npos)
			{
				if (poz == 0) continue;
				else
				{
					nazwa.erase(poz, 1);
					if (nazwa.size() == dlug) cout << nazwa;
				}
			}
			else break;
		}
		while(nazwa.size() > dlug)
			{
				nazwa.erase(nazwa.size() - 1, 1);
			}
		cout << nazwa;
	}
}

 

2 odpowiedzi

0 głosów
odpowiedź 12 sierpnia 2020 przez j23 Mędrzec (164,240 p.)

Wywal ze wszystkich pętli:

if (nazwa.size() == dlug) cout << nazwa;

iDo warunku pętli dodaj jeszcze nazwa.size() > dlug.

0 głosów
odpowiedź 12 sierpnia 2020 przez Arek04 Użytkownik (530 p.)

Problem rozwiązany. Okazało się, że przy usuwaniu samogłosek zawsze zaczynałem od pierwszej litery, a nie od drugiej. Pomogło dodanie drugiego argumentu w funkcji find_first_of().

			poz = nazwa.find_first_of("AEIOUYaeiouy", 1);

 

Podobne pytania

0 głosów
0 odpowiedzi 179 wizyt
pytanie zadane 17 czerwca 2018 w SPOJ przez Kamil Paradowski Użytkownik (620 p.)
0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 12 stycznia 2019 w SPOJ przez WireNess Stary wyjadacz (11,220 p.)
0 głosów
1 odpowiedź 182 wizyt
pytanie zadane 26 października 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

85,082 zapytań

133,883 odpowiedzi

296,819 komentarzy

56,216 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...