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

Czemu w tym kodzie kompilator wyświetla limit czasu?

Object Storage Arubacloud
0 głosów
158 wizyt
pytanie zadane 25 maja 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
#include <iostream>
#include <string>
using namespace std;

int main() {
	string tekst; 

	while(getline(cin, tekst)){ 

	for(int i(0); i<tekst.size(); i++)	
		{
		 	
		 if (tekst[i]=='<')
		  while(tekst[i]!='>')
		  {	
			if(tekst[i]==' ') continue;
		
			else if(int(tekst[i+1])<90 && int(tekst[i+1])>64) continue;
				
			else if(int(tekst[i+1])<123 && int(tekst[i+1])>96) tekst[i+1]=char(int(tekst[i+1]-32));
			
			i++;
			}
			
			
		  }	cout<<tekst<<endl;
		}
		
	
	
	return 0;
}

 

komentarz 25 maja 2017 przez vector Dyskutant (9,200 p.)
Mi się kompiluje bez rzadnych błędów, możesz sprecyzować bardziej problem ?
komentarz 25 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Po prostu ideone kompiluje , kompiluje i wyświetla limit czasu. I tak cały czas :/
Myślałam, że może jakiś błąd w pętlach, ale jak Tobie się kompiluje normalnie to może sprawdzę na codeblocksie
komentarz 25 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Na codblocksie działa normalnie, ale na spoju też jest wyświetlony limit czasu :/
komentarz 25 maja 2017 przez MetGang Nałogowiec (34,360 p.)
Limit czasu, czyli Twój algorytm jest za wolny. Ulepsz go.
komentarz 25 maja 2017 przez Knayder Nałogowiec (37,640 p.)
Nie no kurde, to jest żart?
Kod wywala ci limit czasu, no ale kurde w jakim zadaniu? Nikt tu nie jest wróżką. Skąd mamy wiedzieć co to za kod.
komentarz 25 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Chciałam uniknąc podania zadania bo to spoj to raz, a dwa to zakładałam, że może mam jakąś nieskończoną pętlę której nie widzę
komentarz 25 maja 2017 przez Knayder Nałogowiec (37,640 p.)

Chciałam uniknąc podania zadania bo to spoj to raz

Nie rozumiem tego problemu.
I nadal podtrzymuje. Jak mamy się domyśleć co robi ten kod (Oczywiści bo głębszej i długotrwałej analizie dałoby radę) bez treści zadania.

komentarz 25 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
No więc ten kod powinienw każdym wpisanym tekście zamienić małe litery na duże, ale tylko wtedy gdy znajdują się one między znakami "<" i ">" czyli:

na wejściu np. iaw<asA>

a na wyjściu iaw<ASA>

2 odpowiedzi

+1 głos
odpowiedź 25 maja 2017 przez j23 Mędrzec (194,920 p.)
wybrane 25 maja 2017 przez ChiriChiri
 
Najlepsza
while(tekst[i]!='>')
{ 
	if(tekst[i]==' ') continue;
	else if(int(tekst[i+1])<90 && int(tekst[i+1])>64) continue;
	...

	i++;
}

Wystarczy, że w tekst pojawi się spacja lub znaki od A do Z, i pętla będzie kręcić bez końca.

komentarz 25 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Dziękuję :)
+1 głos
odpowiedź 25 maja 2017 przez Knayder Nałogowiec (37,640 p.)

Nie będę nawet próbował rozszyfrowywać tego kodu który podałeś.

Miałeś racje, zrobiłeś pętle, która się nigdy nie skończy.
W pętli, wartość zmiennej tekst[i] nigdy się nie zmienia, więc while(tekst[i]=!'<') przy wcześniejszym if'ie, zawsze będzie prawdziwy.

Tutaj wstawiam kod, który napisałem.
http://ideone.com/G2guGB
 

#include <iostream>
#include <string>
 
int main() { 
	std::string text = "HaLoo<hSssj>ss<asd>dS"; //Tekst do zamiany
	std::size_t last = 0;
	while (true) {
		std::size_t startPos = text.find('<', last); //Znajdź znak '<' zaczynając od pozycji w zmiennej "last"
		if (startPos == std::string::npos) //Jeżeli nic nie znalazło, zakończ pętle
			break;
		std::size_t endPos = text.find('>', last); //Znajdź znak '>'. Zakładamy że zapis zawsze będzie poprawny i dla każdego < będzie istniał >
		for (int i = startPos; i < endPos; i++) //Zamień literki na ich wielkie odpowiedniki.
			text[i] = toupper(text[i]);
		last = endPos+1; //Zmien wartość zmiennej last, żeby nie znalazło znowu tej samej pary znaków < i >
	}
	std::cout << text; //Wypisz na ekran zmieniony tekst.
	return 0;
}

 

komentarz 25 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Ale jak dałam w pętli i++ to nie powinno się zmieniać?
komentarz 25 maja 2017 przez Knayder Nałogowiec (37,640 p.)
A faktycznie, nie zauważyłem.

Podobne pytania

0 głosów
1 odpowiedź 229 wizyt
pytanie zadane 12 marca 2023 w C i C++ przez alfutek Początkujący (360 p.)
0 głosów
1 odpowiedź 626 wizyt
0 głosów
0 odpowiedzi 237 wizyt
pytanie zadane 24 sierpnia 2020 w SPOJ przez magda_19 Gaduła (3,080 p.)

92,555 zapytań

141,403 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!

...