๋ฌธ์์ด ์คํธ๋ฆผ
๋ฌธ์์ด์ ์ฌ๋ฌ ๊ฐ์ง ์๋ฃํ์ด ๋ค์ด์์ ๋ ์ฉ๋์ ๋ง๊ฒ ํ์ฑํ๊ธฐ ์ ์ฉํ๋ค.
- ํค๋ #include <sstream>
์ฝ๋ฉ ํ ์คํธ์์ ๋ฌธ์์ด์ ํ์ดํ ๋ C++ string๋ง์ผ๋ก ํด๊ฒฐํ๊ธฐ์ ์์ ์ด๋ ค์์ด ์๋ค.
1. ๋ฌธ์์ด ์คํธ๋ฆผ
1) stringstream
- ์ ์ถ๋ ฅ ์คํธ๋ฆผ: ์ ๋ ฅ ์คํธ๋ฆผ, ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ชจ๋ ํ ์ ์๋ค.
2) istringstream
- ์ ๋ ฅ ์คํธ๋ฆผ
- ๋ฌธ์์ด์ ๊ณต๋ฐฑ๊ณผ '\n'์ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ํ์์ผ๋ก ์ฐจ๋ก๋๋ก ๋ถ๋ฆฌํ ๋ ํธ๋ฆฌํ๋ค.
- ๋ฐ๋ณต๋ฌธ ์คํ ์ ์๋ฃํ์ ๋ง๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋๊น์ง ์คํ๋๋ค.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
istringstream iss("test\n123 aaa 456");
string s1, s2;
int i1, i2;
iss >> s1 >> i1 >> s2 >> i2; // ๋ฌธ์์ด์ ํ์ฑํ๊ณ ๋ณ์ํ์ ๋ง๊ฒ ๋ณํํ๋ค.
cout << s1 << endl; // test
cout << i1 << endl; // 123
cout << s2 << endl; // aaa
cout << i2 << endl; // 456
}
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string str1 = "1D2S#10S";
string str2 = "1111DAWV2S#10S";
istringstream iss1(str1);
istringstream iss2(str2);
int num1, num2;
while (iss1 >> num1) cout << num1 << " ";
cout << endl;
while (iss2 >> num2) cout << num2 << " ";
cout << endl;
istringstream iss3(str1);
istringstream iss4(str2);
char ch1, ch2;
while (iss3 >> ch1) cout << ch1 << " ";
cout << endl;
while (iss4 >> ch2) cout << ch2 << " ";
cout << endl;
}
// ์คํ ๊ฒฐ๊ณผ
// 1
// 1111
// 1 D 2 S # 1 0 S
// 1 1 1 1 D A W V 2 S # 1 0 S
3) ostringstream
- ์ถ๋ ฅ ์คํธ๋ฆผ
- ๋ฌธ์์ด์ ์กฐ๋ฆฝํ๊ฑฐ๋ ํน์ ํ์์ ๋ฌธ์์ด๋ก ๋ณํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
ostringstream oss;
string s1 = "abc", s2 = "gjw";
int i1 = 19234;
double d1 = 3.591;
oss << s1 << "\n" << i1 << "\n" << s2 << "\n" << d1; // ๋ฌธ์์ด์ ๋ถ์ธ๋ค.
cout << oss.str(); // ๋ฌธ์์ด์ ๊บผ๋ธ๋ค.
}
// ์คํ ๊ฒฐ๊ณผ
// abc
// 19234
// gjw
// 3.591
4) str(), clear()
- str(string s): stringstream์ ์ ์ฅ๋ ๋ฌธ์์ด์ ๋ฐ๊พผ๋ค. ์ด๋ s๊ฐ "" ์ผ ๊ฒฝ์ฐ ๋ฌธ์์ด์ ์ญ์ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- str(): stringstream์ด ์ ์ฅํ๊ณ ์๋ ๋ฌธ์์ด์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ค.
- clear(): stringstream ์ฌ์ฌ์ฉํ๋ ค๋ฉด clear()๋ฅผ ์คํํด์ผ ํ๋ค. ์ด๋ ์ ์ฅ๋ ๋ฌธ์์ด์ด ์ญ์ ๋์ง ์๋๋ค.
5) get(), unget()
- get(): ์ปค์๋ฅผ ๋ค๋ก ์ฎ๊ธฐ๋ฉด์ ๊ฐ์ ๋ฐํํ๋ค.
- unget(): ์ปค์๋ฅผ ์์ผ๋ก ๋ค์ ์ฎ๊ธด๋ค.
string str = "123abc";
// get()
stringstream ss1;
ss1.str(str);
cout << ss1.get() - '0'; // 1: -'0' ์ํด์ฃผ๋ฉด ์์คํค์ฝ๋๊ฐ์ด ๋์ด
cout << ss1.get() - '0'; // 2
// unget()
stringstream ss2;
ss2.str(str);
char ch;
ss2 >> ch; // 1
ss2 >> ch; // 2
ss2.unget();
ss2 >> ch; // 1
6) getline()
- ๋ฌธ์์ด์ ๊ณต๋ฐฑ์ด๋ '\n'์ด ์๋ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string str = "gkg|qiew|789", token;
stringstream ss(str);
while (getline(ss, token, '|')) {
cout << token << endl;
}
}
// ์คํ ๊ฒฐ๊ณผ
// gkg
// qiew
// 789
2. ํ์ฉ
1) ๋ ์ง๋ฅผ ์ด๋ก ๋ฐ๊พธ๊ธฐ
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main(void) {
vector<long long> time;
string str = "2019:06:30 12:00:30"; // ์ฐ ์ ์ผ ์ ๋ถ ์ด
for (int i = 0; i < str.size(); i++)
if (str[i] == ':') str[i] = ' ';
long long num = 0;
stringstream stream;
stream.str(str);
while (stream >> num)
time.push_back(num);
long long second = 0;
second += time[0] * 365 * 24 * 60 * 60; // ์ฐ
second += time[1] * 30 * 24 * 60 * 60; // ์
second += time[2] * 24 * 60 * 60; // ์ผ
second += time[3] * 60 * 60; // ์
second += time[4] * 60; // ๋ถ
second += time[5]; // ์ด
cout << second;
}