๋ฌธ์์ด ์ ๋ ฅ
๋จผ์ , ๊ณต๋ฐฑ์ ํฌํจํ ๋ฌธ์์ด์ ํ ์ค๋ก ์ ๋ ฅ๋ฐ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค.
1
2
3
4
5
6
7
|
// string ๊ณต๋ฐฑ ํฌํจ ๋ฌธ์์ด ์
๋ ฅ
string str;
getline(cin, str);
// char ๊ณต๋ฐฑ ํฌํจ ๋ฌธ์์ด ์
๋ ฅ
char ch[100];
cin.getline(ch, 100);
|
cs |
- string ์๋ฃํ์ ์ด์ฉํ๊ธฐ ์ํด์๋ ํค๋ <string>๊ฐ ํ์ํ๋ค.
- ์ฒซ ๋ฒ์งธ ์ธ์๋ก istream ๊ฐ์ฒด
- ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ ฅ ๋ฐ์ string ๋ณ์ ์ด๋ฆ
- ์ธ ๋ฒ์งธ ์ธ์๋ก delimitChar(์๋ต๊ฐ๋ฅ. default '\n')
- delimitChar์ ' '๋ฅผ ์ค๋ค๋ฉด, ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋์ด ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ค.
- char ์๋ฃํ์ ์ฌ์ฉํ ๋๋ cin.geline์ ์ฌ์ฉํ์ฌ ํ์ค๋ก ์
๋ ฅ๋ฐ์ ์ ์๋ค. ์ด ๋ <iostream> ํค๋๊ฐ ์์ด์ผ ํ๋ค.
- ์ฒซ ๋ฒ์งธ ์ธ์๋ก char๋ฐฐ์ด์ ์ด๋ฆ
- ๋ ๋ฒ์งธ ์ธ์๋ก char ๋ฐฐ์ด์ ์ ์ฅ๋ ์ต๋ character ๊ฐ์ n
- ์ธ ๋ฒ์งธ ์ธ์๋ก delimitChar(์๋ต๊ฐ๋ฅ. default '\n')
- n -1 ๊ฐ์ ๋ฌธ์๋ฅผ ์ฝ๋ ๊ฒฝ์ฐ(n๋ฒ์งธ์๋ '\0' ์ ์ฅํด์ผํ๊ธฐ ๋๋ฌธ์ ํ ์นธ ๋น์๋ )์, delim์ผ๋ก ์ง์ ๋ ๋ฌธ์๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๊ฒ ๋๋ค.
๋ฌธ์์ด ์ถ์ถ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// stringstream ์ผ๋ก ๋ฌธ์์ด ์ถ์ถ/๋ณต์ฌ
// ์ค๊ฐ์ num์ ํด๋นํ๋ ์๋ฃํ์ด ์๋ ์๋ฃํ์ด ์๋ค๋ฉด, ๊ทธ ์์์ ์ข
๋ฃ.
int num;
stringstream ss;
ss.str(str); // ํ์ฌ stringstream ์ ๊ฐ์ str๋ก ๋ณ๊ฒฝ
while (ss >> num) // num์ผ๋ก ์๋ฃ๋ฅผ ์ถ์ถ/๋ณต์ฌ
printf("%d ", num);
printf("\n");
// stringstream ์ฌ์ฌ์ฉ. ์ ์ฅ๋ ๋ฌธ์์ด ์ญ์
string str2 = "10 .23 567 -95";
double d;
ss.clear();
ss.str(str2);
while (ss >> d)
printf("%.2lf ", d);
printf("\n");
|
cs |
string s = "10000 1000 100 10 1 -1";
- stringstream์ ์ฃผ์ด์ง ๋ฌธ์์ด์์ ํ์ํ ์ ๋ณด๋ฅผ ๋นผ๋ผ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
- ํค๋ <sstream> ์ด ํ์ํ๋ค.
- while(ss >> num) ์ผ๋ก, ๋์ด์ num์ ํด๋นํ๋ ์๋ฃํ์ ๋ง๋ ์ ๋ณด๊ฐ ์์ ๋๊น์ง ์คํธ๋ฆผ์์ num์ผ๋ก ์๋ฃ๋ฅผ ๋ณต์ฌํ๋ค. ๋์ ๋๋ฌํ๋ฉด ๋๋๋ค.
- ์ค๊ฐ์ num ๊ณผ ๊ฐ์ง ์์ ์๋ฃํ์ด ๋์ค๋ฉด ๋ณต์ฌํ์ง ์๊ณ ์ข ๋ฃ.
- stringstream์ ๊ฐ์ ๋ณํ์ง ์์.
- 10๋ฒ ์ค ์ดํ์ ์๋ ์์ ์์๋ stringstream์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์ clear() ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
- clear()๋ฅผ ์ค์ํ ๊ฒฝ์ฐ์๋ง, str()๋ก ์๋ก์ด ๋ฌธ์์ด์ ๋ฐ์์ ๋ ์ฒซ ์์น๋ถํฐ ์ถ์ถ์ด ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ string์ด ์ด๋ฏธ ๋๊น์ง ๋๋ฌํ๋ค๋ flag๊ฐ ์ฌ๋ผ๊ฐ์, ๋ ์ด์ ๊ฐ์ด ์ถ์ถ๋์ง ์๋๋ค๊ณ ํ๋ค.
- ex) ss.str("");
- double ํ์ผ๋ก ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ ์๋๋ฐ, .23 ์ double ์๋ฃํ์ ๋ง๊ฒ 0.23์ผ๋ก ์ถ๋ ฅ๋๋ค. ๋ง์ฝ string ์๋ฃํ์ด์๋ค๋ฉด .23 ๊ทธ๋๋ก ์ถ๋ ฅ๋๋ค.
stringstream ํ์ฉ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// ํ์ฉ๋ฐฉ๋ฒ
vector<string> input(3, "");
input[0] = "2016 Goo 1";
input[1] = "2020 Joon 50";
input[2] = "2021 Yeop 100";
for (int i = 0; i < input.size(); i++) {
int num, score;
string name;
stringstream ss;
ss.str(input[i]);
ss >> num;
ss >> name;
ss >> score;
//printf("%d %d %s", num, name, score);
cout << num << " " << name << " " << score << "\n";
// ์ดํ ํ์ํ ์๋ฃ ๊ตฌ์กฐ์ ์ ์ฅํ์ฌ ํ์ฉํ๋ค.
}
|
cs |
- input์ผ๋ก ์ฃผ์ด์ง๋ string ๋ฌธ์์ด์ ์๋ฃํ์ ๋ง๊ฒ ์ถ์ถํ๋ค.
- int, int, string ํ์ ๋ณ์๋ฅผ ๋ง๋ค๊ณ ๊ฐ๊ฐ ss >> num, ss >> name, ss >> score๋ก ๋ณ์์ ์ ์ฅ.
- ์ด๋ ๊ฒ ์ถ์ถํ ๋ณ์๋ค์ ์๋ฃ ๊ตฌ์กฐ์ ์ ์ฅํ์ฌ ํ์ฉํ ์ ์๋ค.
- ์ด ๋, printf ๋ก๋ ์ถ๋ ฅ์ด ์๋๊ณ , cout๋ก ํด์ผ ํ๋ค.
์ฐธ๊ณ
'๐ > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ํ์ ์ง์ ์, ์์ ์ง์ ์ (0) | 2021.01.13 |
---|---|
[C++] cin, cout ์๊ฐ ์ด๊ณผ ๋ฌธ์ ํด๊ฒฐ (0) | 2020.10.16 |
[C++] priority_queue ์ฐ์ ์์ ํ (0) | 2020.03.25 |
[C++] ๋ฐฐ์ด๋ณต์ฌ memcpy, copy (0) | 2020.03.23 |
[C++] map iterator(๋ฐ๋ณต์) ํ์ฉ (0) | 2020.03.23 |
๋๊ธ