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

String na int. Czy da się to zrobić szybciej?

Object Storage Arubacloud
0 głosów
280 wizyt
pytanie zadane 22 grudnia 2021 w C i C++ przez Dobdo Użytkownik (570 p.)

Hej, Robię jakieś zadania olimpiadowe i tam zwykle jest takie coś, że wpisywane jest kilka wartości w jednej linii np. "123 23 12", no i trzeba je potem jakoś wyodrębnić i wpisać do osobnych zmiennych liczbowych. Napisałem taki algorytm, ale jest on moim zdaniem zbyt złożony (oczywiście działa). Czy macie jakieś pomysły jak go skrócić, a może i przyspieszyć? 

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

string odwruc(string wyraz)
{
	string nowy = "";
	
	for(int i = wyraz.size() - 1; i >= 0; i--)
	{
		nowy += wyraz[i];
	}
	
	return nowy;
}

int liczba(char num)
{
	if((int)num >= (int)'0' && (int)num <= (int)'9')
	{
		return (int)num - (int)'0';
	}
}

int znajdz(string wiersz, int numer = 0) //numer czyli po ktorej spacji ma pobierac cyfry. Dla 0 pobirze wszystkie liczby do pierwszej spacji
{
	int spacje[wiersz.size()];
	int n = 0, p = 1, num = 0;
	string odp;
	spacje[n] = -1;
	n++;
	
	for(int i = 0; i < wiersz.size(); i++)
	{
		if(wiersz[i] == ' ')
		{
			spacje[n] = i;
			n++;
		}
	}
	
	for(int i = 0; i < wiersz.size(); i++)
	{
		odp = wiersz.substr(spacje[numer]+1, spacje[numer + 1]);
	}
	
	odp =  odwruc(odp);
	
	for(int i = 0; i < odp.size(); i++)
	{
		num += liczba(odp[i]) * p;
		p *= 10;
	}
	return num;
}



int main()
{
	int n, m;
	string wiersz;
	getline(cin, wiersz);
	n = znajdz(wiersz, 0);
	m = znajdz(wiersz, 1);

	cout<<n << " " << m;
}

 

1 odpowiedź

+2 głosów
odpowiedź 22 grudnia 2021 przez Velta Maniak (52,370 p.)
wybrane 22 grudnia 2021 przez Dobdo
 
Najlepsza

Na standardowym wejściu automatycznie je oddzieli.

int n1, n2;
cin >> n1 >> n2;
cout << "n1 = " << n1 << endl << "n2 = " << n2 << endl;

 

1
komentarz 22 grudnia 2021 przez Wiciorny Ekspert (270,190 p.)

string odwruc(string wyraz)

nie no tragedia, słuchaj autorze- juz pomijam nazwy w języku ojczystym, ale z błędami to razi  

komentarz 22 grudnia 2021 przez Dobdo Użytkownik (570 p.)

@Velta, Wow faktycznie. Ale szybkie rozwiązanie, niepotrzebnie się męczyłem. Dziękuję ślicznie za pomoc z programem i ortografią :)

komentarz 22 grudnia 2021 przez Dobdo Użytkownik (570 p.)

@Velta, A wiesz co zrobić, gdy chcę te wejście pobrać z pliku tzn. daje wtedy getline(nazwa_pliku, zmienna) no i jak kto rozdzielić wtedy na 2 zmienne jakimś prostym sposobem?

1
komentarz 22 grudnia 2021 przez Velta Maniak (52,370 p.)

Właściwie na tej samej zasadzie.

vector<int> numbers = vector<int>();
fstream fs(filePath, fstream::in);
int tempN;
while (fs >> tempN)
{
    numbers.push_back(tempN);
}

 

komentarz 22 grudnia 2021 przez Dobdo Użytkownik (570 p.)
edycja 22 grudnia 2021 przez Dobdo

@Velta, Super. Dziękuję!

Podobne pytania

0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 28 grudnia 2022 w Ruby przez krukWiesio Początkujący (400 p.)
+1 głos
3 odpowiedzi 1,708 wizyt
pytanie zadane 5 stycznia 2021 w C# przez MateuszFisch Początkujący (250 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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!

...