๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/C++

[C++] ๊ณต๋ฐฑ ํฌํ•จ ๋ฌธ์ž์—ด ์ž…๋ ฅ | stringstream ๋ฌธ์ž์—ด ์ถ”์ถœ

by dar0m! 2021. 3. 2.

๋ฌธ์ž์—ด ์ž…๋ ฅ

๋จผ์ €, ๊ณต๋ฐฑ์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด์„ ํ•œ ์ค„๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

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++] ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๋ฌธ์ž์—ด ์ž…๋ ฅ๋ฐ›๊ธฐ(char array, string : getline)

C, C++์—์„œ ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ "๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๋ฌธ์ž์—ด"์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #include using namespace std; int main(){..

shjz.tistory.com

 

 

Stringstream ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

ํ—ค๋” : stringstream์€, ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋นผ๋‚ผ ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ๋ณด์ž. float num; stringstream stream1; string string1 = "25 1 3 .235\n1111111\n222222"; stream1.str..

word.tistory.com

 

๋Œ“๊ธ€