Download as pdf or txt
Download as pdf or txt
You are on page 1of 46

Programozás II.

Dr. Siket István

Szegedi Tudományegyetem
Informatikai Intézet
Szoftverfejlesztés Tanszék

2023

Programozás II. 1 / 44
Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. Bevezetés 2 / 44


Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. Bevezetés Kurzus információk 3 / 44


Előadó
Dr. Siket István
szoba: Szoftverfejlesztés Tanszék (Árpád tér 2.)
földszint 17. szoba
telefon: +36 62 54-4158
e-mail: siket@inf.u-szeged.hu
honlap: http://www.inf.u-szeged.hu/~siket/

Programozás II. Bevezetés Kurzus információk 4 / 44


Előfeltételek, jelentkezés
Előfeltételek
Programozás alapjai
C programozási nyelv
Programozás I. (gyakorlat)
Objektum-orientált programozás
Aki nem teljesítette ezeket a tárgyakat, NE vegye fel a kurzust!
Kurzusra jelentkezés
A kurzusra a Neptunon keresztül lehet jelentkezni
Kurzusfelvevő lap
Csak olyan gyakorlatra lehet jelentkezni, ahol van hely

Programozás II. Bevezetés Kurzus információk 5 / 44


Gyakorlat anyaga, részvétel
Nappali

Minden gyakorlaton pont ugyanaz az anyag lesz


Az adott heti feladat megoldását felrakjuk
Az előző hetit folytatjuk
A gyakorlat látogatása kötelező
Első két hét kivétel
Két igazolatlan hiányzás lehet
Nem eshet ZH időpontra (a ZH ilyen esetben nem pótolható)
Kettőnél több igazolatlan hiányzás esetén a félév nem teljesített
Igazolt hiányzás
Előre is lehet jelezni
Igazolást be kell mutatni
ZH-t be lehet pótolni

Programozás II. Bevezetés Kurzus információk 6 / 44


Gyakorlat számonkérés
Nappali

Kvíz (CooSpace kérdések)


Gyakorlat elején 2 kérdés (3 perc)
Egy az előző heti előadásból, egy ismétlő kérdés
17 pontot lehet szerezni
A 2. héten 1 kérdés lesz
Rossz válaszért lesz pontlevonás
Legalább 9 pontot el kell érni
Heti házi feladat
Bírón kell beadni kedd délig
9 pontot lehet szerezni
Legalább 1 pontot el kell érni
3 ZH a félév során
Gép előtt, bíró értékeli
Általunk biztosított segédanyag használható
121 pontot lehet szerezni (28, 54, 39)
Legalább 63 pontot el kell érni

Programozás II. Bevezetés Kurzus információk 7 / 44


Gyakorlati jegy
Nappali

Elégséges jegyhez követelmény


Maximum 2 igazolatlan hiányzás
Házifeladatokból minimum 1 pont (9 pontból)
Kvízből minimum 9 pont (17 pontból)
ZH-kból minimum 63 pont (121 pontból)
Plusz pontokat lehet órai munkával szerezni
Ponthatárok
129 - 147 jeles (5)
111 - 128 jó (4)
92 - 110 közepes (3)
73 - 91 elégséges (2)
0 - 72 elégtelen (1)
Javítási lehetőség nincs
Igazolt hiányzás esetén a ZH pótolható

Programozás II. Bevezetés Kurzus információk 8 / 44


Előadás
Vizsga feltétele: legalább elégséges gyakorlati jegy
CooSpace teszt
Lesz kifejtős kérdés is
Ponthatárok
88 - 100 jeles (5)
76 - 87 jó (4)
63 - 75 közepes (3)
50 - 62 elégséges (2)
0 - 49 elégtelen (1)
Megajánlott jegy
Jeles (5) gyakorlati jegy esetén jeles vizsgajegy
Jó (4) gyakorlati jegy esetén jó vizsgajegy

Programozás II. Bevezetés Kurzus információk 9 / 44


Egyéb
Hivatalos kommunikáció
Hivatalos e-mail címről írt levél
CooSpace üzenet
Kérdések
Levél, CooSpace
Discord
Reklamálás
Egyből, amint valami probléma van
48 órán belül e-mailben az előadónak
Speciális képzési igényű hallgatók
SANSZ iroda: https://u-szeged.hu/sansz
Bármilyen kedvezményt az érintett hallgatók csak a SANSZ Iroda
igazolása alapján kaphatnak

Programozás II. Bevezetés Kurzus információk 10 / 44


Szakirodalom
Online
https://okt.inf.szte.hu/prog2/
http://www.cplusplus.com/
https://en.cppreference.com/w/
Könyvek
Benedek Zoltán - Levendovszky Tihamér: Szoftverfejlesztés C++
nyelven, magyar nyelvű, ISBN 978-963-9131-94-1, Szak Kiadó
Bjarne Stroustrup. A C++ Programozási nyelv
Herbert Schildt: C/C++ Referenciakönyv, magyar nyelvű, Panem Kft
Budapest (1998)
Bruce Eckel. Thinking in C++
Scott Meyers. Effective C++
Scott Meyers. More Effective C++

Programozás II. Bevezetés Kurzus információk 11 / 44


Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. C++ Nyelv 12 / 44


Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. C++ Nyelv Bevezetés 13 / 44


C++ története
Kezdetek

1979-ben Bjarne Stroustrup kezdte el kidolgozni


A C nyelv továbbfejlesztése volt
„C with Classes” volt a neve
1983-ban lett C++ a neve
A ++ arra utal, hogy a C nyelvez képest sok új lehetőséggel bővült
1985-ben jelent meg az „első változat”
Nem ISO szabvány
1989-ben jelent meg a 2.0

Programozás II. C++ Nyelv Bevezetés 14 / 44


C++ története
ISO/IEC szabványok

ISO/IEC 14882:1998
Az első szabvány
ISO/IEC 14882:2003
ISO/IEC 14882:2011 (C++0x)
Bjarne Stroustrup: Surprisingly, C++11 feels like a new language: The
pieces just fit together better than they used to and I find a higher-level
style of programming more natural than before and as efficient as ever.
ISO/IEC 14882:2014 (C++1y)
ISO/IEC 14882:2017 (C++1z)
ISO/IEC 14882:2020 (C++2a)
Változások
Elsősorban bővítések
„Nem használt” nyelvi elemek eltávolítása

Programozás II. C++ Nyelv Bevezetés 15 / 44


Hol tart most a C++?
2023. szeptemberében 10,65%-kal a 3. legnépszerűbb nyelv
1. helyezett a Python nyelv (14,16%)
2. helyezett a C nyelv (11,27%)

Forrás: https://www.tiobe.com/tiobe-index/

Programozás II. C++ Nyelv Bevezetés 16 / 44


C és C++ nyelv kapcsolata
Különbségek

A C++ a C továbbfejlesztése
Akkor a C nyelv a C++ nyelv része? NEM
Minden C program lefordítható C++ programként is? NEM
A C++ kulcsszavak problémát okoznak
Szigorúbb „típusellenőrzés”
int * array = malloc (10 * sizeof ( int ) ) ;

Megváltozott „jelentés” (pl. struct)


Ha lefordult, akkor ugyanúgy fut? NEM
Különböző makrók a nyelvekhez
# include < stdio .h >
int main () {
# ifdef __cplusplus
printf ( " C ++ program \ n " ) ;
# else
printf ( " C program \ n " ) ;
# endif
}

Programozás II. C++ Nyelv Bevezetés 17 / 44


C és C++ nyelv kapcsolata
Különbségek nyelvi szinten

Ha pont ugyanazt a kódot fordítjuk, akkor ugyanúgy fut? NEM


Például a karakterliterálokat (’a’, ’b’, ...) másképp kezelik
C-ben egész típus
C++-ban karakter típus

# include < stdio .h >

int main () {
if ( sizeof ( 'a ') == sizeof ( int ) )
printf ( " C program \ n " ) ;
else if ( sizeof ( 'a ') == sizeof ( char ) )
printf ( " C ++ program \ n " ) ;
}

Vannak más apró eltérések is


https://www.geeksforgeeks.org/
write-c-program-produce-different-result-c/

Programozás II. C++ Nyelv Bevezetés 18 / 44


C++ nyelv
Programozási paradigmák

Procedurális (C nyelv)
C++-ban is lehet „így” programozni
Azonban még így is bővebb, mint a C
A különbségek ellenére a C++-t a „C folytatásának” tekintjük
Röviden átismételjük
Objektum-orientált (Java)
Hasonló a Javahoz, de sok eltérés van
Javaban könnyebben és hatékonyabban (gyorsabban) lehet programozni
De például ha a performancia számít, akkor C++
Generikus
Az algoritmusokban használt típusok a példányosításnál lesznek
meghatározva
Például Java generikus programozás
Azonban a C++ itt is több, mint a Java
Fordítás idejű számítások

Programozás II. C++ Nyelv Bevezetés 19 / 44


C++ szabvány
A C++ szabvány leírja a C++ nyelvet
Azonban számos esetben (szándékosan) nem definiál minden részletet
Definiálja, hogy az adott konstrukció nem definiált viselkedéshez vezet
Különböző platformokon „másra” van szükség
Például a pointer mérete
32 biten más méretre van szükség, mint 64 biten
Optimalizálási lehetőség
A fordítóprogram könnyebben optimalizálhat
Performancia
Például nincs tömb túlindexelés ellenőrzés
„Gyorsítás”, mert nem ellenőrzi
Veszélyes, mert túlindexelhetjük a tömböt

Programozás II. C++ Nyelv Bevezetés 20 / 44


Implementáció-függő viselkedés
Implementation-defined behavior

A program viselkedése implementáció függő,


de a megvalósításnak dokumentálva kell lennie
Példa: a size_t egy előjeltelen egész szám
typedef /∗ i m p l e m e n t a t i o n −d e f i n e d ∗/ size_t ;
A sizeof operátor visszatérési típusa
Legalább 16 bit
A szabvány nem specifikálja, hogy pontosan hány bájtos legyen
A legnagyobb objektum méretét is tudni kell ábrázolni rajta
Például ha unsigned int típust használunk indexelésre
64 bites rendszereken gond lehet, ha az index nagyobb, mint UINT_MAX

Programozás II. C++ Nyelv Bevezetés 21 / 44


Nem specifikált viselkedés
Unspecified behavior

A program viselkedése implementáció függő,


de a megvalósításnak NEM kell dokumentálva lennie
Szabadság az optimalizációk számára
Bármely kimenet valid eredménynek tekinthető
Példa: a függvény paraméterlistájának kiértékelési sorrendje
int foo () { printf ( " foo " ) ; return 1; }
int goo () { printf ( " goo " ) ; return 1; }
void test ( int , int ) { /* ... */ }

int main () {
test ( foo () , goo () ) ;
}

Lehetséges kimenetek (mindegyik helyes)


GCC 6.3 goo foo
Visual Studio 2017 goo foo
Clang 7.0 foo goo (a foo-t hívja először!!!)

Programozás II. C++ Nyelv Bevezetés 22 / 44


Nem definiált viselkedés
Undefined behavior

A szabvány nem definiálja, hogy mi legyen a program működése


Bármilyen viselkedés lehetséges
A fordítóprogramnak nem feladata ezek felismerése
Példa: előjeles egész szám túlcsordulása
int main () {
int i = INT_MAX ;
printf ( " % d \ n " , i +1) ;
}

Mi lesz a program futásának az eredménye?

Programozás II. C++ Nyelv Bevezetés 23 / 44


Nem definiált viselkedés
Undefined behavior

A szabvány nem definiálja, hogy mi legyen a program működése


Bármilyen viselkedés lehetséges
A fordítóprogramnak nem feladata ezek felismerése
Példa: előjeles egész szám túlcsordulása
int main () {
int i = INT_MAX ;
printf ( " % d \ n " , i +1) ;
}

Mi lesz a program futásának az eredménye?


-2147483648
De valójában nem definiált

Programozás II. C++ Nyelv Bevezetés 23 / 44


Nem definiált viselkedés (folyt.)
Undefined behavior

bool overflow ( int i ) {


return i +1 < i ;
}

int main () {
int i = INT_MAX ;
if ( overflow ( i ) )
printf ( " overflow \ n " ) ;
else
printf ( " % d \ n " , i +1) ;
}

Mi lesz az eredmény?

Programozás II. C++ Nyelv Bevezetés 24 / 44


Nem definiált viselkedés (folyt.)
Undefined behavior

bool overflow ( int i ) { _Z8overflowi :


return i +1 < i ; .LFB12 :
} .cfi_startproc
xorl % eax , % eax
int main () {
int i = INT_MAX ; ret
if ( overflow ( i ) ) .cfi_endproc
printf ( " overflow \ n " ) ;
else
printf ( " % d \ n " , i +1) ;
}

Mi lesz az eredmény?
Az overflow minden esetben hamissal tér vissza
-2147483648
Példák
null pointer dereferencia
Tömb túlindexelés
memcpy, ha a két régió átfedi egymást (C++03)
Programozás II. C++ Nyelv Bevezetés 24 / 44
Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. Ismétlés, eltérések 25 / 44


Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. Ismétlés, eltérések Bevezető 26 / 44


Fejlesztőkörnyezet, fordítóprogram
Szinte minden platform támogatott
Windows, Linux, iOS, Android, beágyazott rendszerek, ...
Fordítóprogramok
Visual Studio parancssori eszközök
cl, link, msbuild, devenv
GCC, the GNU Compiler Collection
C esetében a fordítóprogram a gcc
C++ esetében a fordítóprogram a g++
Clang
Fejlesztő környezetek
Eclipse, Code::Blocks, CodeLite, Visual Studio Code, ...
Nyílt forráskódú, platformfüggetlen
Visual Studio (Windows)

Programozás II. Ismétlés, eltérések Bevezető 27 / 44


Forrás fájlok, GCC fordító
Fájlok kiterjesztése
C esetében
forrás fájl: .c
header fájl: .h
C++ esetében
forrás fájl: .cpp (.C, .cxx, .cc, .c++)
header fájl: .hpp (.h)
A fordítóprogram a kiterjesztés alapján dönti el, hogy C vagy C++
programként kezelje a kódot
Felül lehet bírálni
GCC esetében a -x kapcsolóval
g++ -x c++ pelda.c esetén C++ inputnak fogja tekinteni a pelda.c
fájlt

Programozás II. Ismétlés, eltérések Bevezető 28 / 44


Program belépési pontja
Visszatérési érték

Program belépési pontja C és C++ esetén is a main függvény


int main ( ) { /∗ . . . ∗/ }
int main ( int argc , char ∗ argv [ ] ) { /∗ . . . ∗/ }
Implementáció-függő megvalósítás
int main ( int argc , char ∗ argv [ ] , char ∗ env [ ] ) {}
Visszatérési érték
0 jelzi a helyes futást
Minden más érték hibát jelez
Visszatérési érték megadása
C esetében kiírtuk, még ha 0-val térünk vissza akkor is
Már itt is elhagyható
C++ esetében, ha a program futása eléri a main függvény végét
(main-ben található) return utasítás nélkül, akkor a program 0-val
tér vissza
Nem kell kiírni a return 0 ; -t
Ennek ellenére érdemes kiírni
A diákon hely hiányában nem lesz kiírva
Programozás II. Ismétlés, eltérések Bevezető 29 / 44
Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. Ismétlés, eltérések I/O műveletek 30 / 44


I/O műveletek
C nyelv

Beolvasás
int scanf ( const char ∗ format , . . . )
int fscanf ( FILE ∗ stream , const char ∗ format , ...)
Kiírás
int printf ( const char ∗ format , . . . )
int fprintf ( FILE ∗ stream , const char ∗ format , ...)
Példa
# include < stdio .h >

int main () {
int i , j ;
scanf ( " % d % d " , &i , & j ) ;
printf ( " % d * % d = % d \ n " , i , j , i * j ) ;

return 0;
}

Programozás II. Ismétlés, eltérések I/O műveletek 31 / 44


I/O műveletek
C++ nyelv

A C++ Standard Template Library (STL) része


Folyamok (stream-ek) segítségével valósítja meg
Szabványos bemenet/kimenet (iostream header)
cin szabványos bemenet folyam
cout szabványos kimenet folyam
cerr szabványos hiba (kimenet) folyam
clog szabványos logging (kimenet) folyam
Fájl írása, olvasása (fstream header)
ifstream - stream fájlok olvasására
ofstream - stream fájlok írására
fstream - stream fájlok olvasására és írására
String folyam (sstream header)
stringstream

Programozás II. Ismétlés, eltérések I/O műveletek 32 / 44


C++ szabványos bemenet/kimenet
# include < iostream >

int main () {
int i , j ;
std :: cin >> i >> j ;
std :: cout << i << " * " << j << " = " << i * j << std :: endl ;
}

iostream header fájlt kell include-olni


Az std névtérben találhatóak az I/O folyamok
Scope-olt névvel kell rájuk hivatkozni
std : : (a : : a scope-olás)
A >> és << operátorok segítségével olvasunk és írunk
Az operátor az adott olvasás/írás után a stream-mel tér vissza, azaz
újból alkalmazhatjuk rá az operátort
int i = a ∗ b ∗ c ∗ d ; // a , b , c , d e g e s z
Az endl a sorvége
Programozás II. Ismétlés, eltérések I/O műveletek 33 / 44
C++ szabványos bemenet/kimenet (folyt.)
# include < iostream >

using namespace std ;

int main () {
int i , j ;
cin >> i >> j ;
cout << i << " * " << j << " = " << i * j << endl ;
}

using namespace std ;


A fordító az azonosítók feloldásakor az std névtérben is keresni fog
Nem kell kiírni az std-t
Ki lehet írni, nem okoz gondot

Programozás II. Ismétlés, eltérések I/O műveletek 34 / 44


Tartalom

2 C++ Nyelv Bevezető


1 Bevezetés I/O műveletek
Bevezetés
3 C++ string
Kurzus információk Ismétlés, eltérések

Programozás II. Ismétlés, eltérések C++ string 35 / 44


C „string”
N hosszú karaktersorozat tárolása (str változóban)
char ∗ str = malloc ( N+1) ; // d i n a m i k u s
char str [ N + 1 ] ; // " s t a t i k u s "
Beolvasás
scanf ( "%s" , str ) ;
Értékadás
str = str2 ; HIBÁS!
strcpy ( str , str2 ) ; vagy strncpy ( str , str2 , n ) ;
Honnan tudjuk a méretet? Mi van, ha nem fér el?
str és str2 nem fedheti át egymást
Összehasonlítás
str = = str2 (két egyenlőségjel) nem a tartalmat hasonlítja össze
strcmp ( str , str2 ) a tartalom szerinti összehasonlítás
Max. kapacitása?
strlen ( str ) a tárolt szöveg hosszát adja meg
A kapacitást (általában) nem ismerjük
Memória felszabadításra is figyelni kell dinamikus foglalásnál
Programozás II. Ismétlés, eltérések C++ string 36 / 44
C++ string
Van „valódi” string
Sokkal egyszerűbben használható, mint a „C-string”
A C++ Standard Template Library (stl) része
Az std névtérben található

# include < string >


# include < iostream >

using namespace std ;

int main () {
string s1 = " Hello " ;
string s2 ( " Vilag " ) ;
string s3 ;

s3 = s1 + " " + s2 + " ! " ;


cout << s3 << endl ; // Hello Vilag !
}

Programozás II. Ismétlés, eltérések C++ string 37 / 44


C++ string
Konstruktorok
string ( ) ;
string ( const string& str ) ;
string ( const char ∗ s ) ;
Méret (tárolt string hossza)
size_t size ( ) ;
size_t length ( ) ;
Üres-e?
bool empty ( ) ;
Törlés
void clear ( ) ;
char ∗ reprezentáció
const char ∗ c_str ( ) ;
Rész string
string substr ( size_t p = 0 , size_t l = npos ) ;
p a kezdő pozíció, l a hossz
Programozás II. Ismétlés, eltérések C++ string 38 / 44
C++ string
Első karakter
char& front ( ) ;
Utolsó karakter
char& back ( ) ;
i-edk karakter
char& operator [ ] ( size_t pos ) ;
char& at ( size_t pos ) ;
Keresés
size_t find_first_of ( char c , size_t pos = 0 ) ;
find_last_of, find_first_not_of, find_last_not_of
„Vége”
npos attribútum
Például keresésnél ezzel tudjuk megnézni, hogy volt-e találat

Programozás II. Ismétlés, eltérések C++ string 39 / 44


C++ string
# include < iostream > // bemenet
# include < string > // programozas
// kimenet
using namespace std ; // programozas hossza : 11
// programozas elso karaktere : p
int main () { // 'a ' elso elofordulasa : 5
string s ; // [2 -4]: rog
cin >> s ; // torles utan : ''
cout << s << " hossza : " << s . length () << endl ;
if (! s . empty () )
cout << s << " elso karaktere : " << s [0] << endl ;
size_t pos = s . find_first_of ( 'a ') ;
if ( pos != string :: npos )
cout << " 'a ' elso elofordulasa : " << pos << endl ;
if (4 < s . length () )
cout << " [2 -4]: " << s . substr (1 , 3) << endl ;
s . clear () ;
cout << " torles utan : '" << s << " '" << endl ;
}

Programozás II. Ismétlés, eltérések C++ string 40 / 44


Szám konverziója string-gé
A string és a szám típusok között nincs automatikus konverzió
string s = 5 ; nem alkalmazható
Nem volt a C-string esetében sem
string to_string ( int value ) ; függvény segítségével a
számokat string-gé lehet konvertálni
Nem a string osztály metódusa (de az std névtérben van)
Minden szám típusra alkalmazható (ennyi különböző függvény meg van
valósítva)
int , long , long long , unsigned , unsigned long ,
unsigned long long , float , double , long double
Példa
int main () {
int i = 5;
string s1 = to_string ( i ) ;
string s2 = to_string (3.14) ;
cout << s1 << " " << s2 << endl ;
}
// 5 3.140000

Programozás II. Ismétlés, eltérések C++ string 41 / 44


string konverziója számmá
A string típus nem konvertálódik automatikusan egésszé
string str ( " 4 " ) ;
int i = str ; // HIBA !

int stoi ( const string& str ,


size_t ∗ pos = 0 , int base = 10 ) ;
str: a string, amit számmá kell konvertálni
pos: hány karakter lett feldolgozva
base: a számrendszer alapja (2, 3, 4, ..., 36)
A 0 azt jelenti, hogy automatikusan kell felismernie
Példa
int main () {
string s1 ( " 12345 " ) ;
int i = stoi ( s1 ) ;
cout << i << endl ;
}
// 12345

Programozás II. Ismétlés, eltérések C++ string 42 / 44


string konverziója számmá (folyt.)
Példa
int main () {
string s1 ( " + FF alma " ) ;
unsigned int chars = 0;

int i = stoi ( s1 , & chars , 16) ;


cout << i << " " << chars << endl ;
}

Eredmény: 255 3
16-os számrendszerben az FF az 255 10-es számrendszerben
3 karakter lett feldolgozva (a + jel is)
További konverziók
int: stoi, long: stol, long long: stoll
unsigned long: stoul, unsigned long long: stoull
float: stof, double: stod, long double: stold

Programozás II. Ismétlés, eltérések C++ string 43 / 44


Hibakezelés
Kétféle hiba léphet fel
Nem lehet konvertálni
std : : invalid_argument kivétel dobódik

try {
string s1 ( " alma " ) ;
cout << stoi ( s1 ) << endl ;
} catch ( const invalid_argument & e_inv ) {
cout << " invalid_argument exception " << endl ;
}

Nem fér bele az adott tartományba


std : : out_of_range kivétel dobódik

try {
string s1 ( " 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 " ) ;
cout << stoi ( s1 ) << endl ;
} catch ( const out_of_range & e_out ) {
cout << " out_of_range exception " << endl ;
}

Programozás II. Ismétlés, eltérések C++ string 44 / 44

You might also like