cpp_string - 8BitsCoding/RobotMentor GitHub Wiki

C์–ธ์–ด์™€ C++์˜ string์ฒ˜๋ฆฌ ์ฐจ์ด์ ์„ ๋ฐฐ์›Œ๋ณธ๋‹ค.

  • C - char *๋กœ ๋ฌธ์ž์—ด(string) ์ฒ˜๋ฆฌ
  • C++ - 'std::string'์œผ๋กœ ๋ฌธ์ž์—ด(string) ์ฒ˜๋ฆฌ

์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.


C ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ์Œ.

const int LINE_SIZE = 256;

char line[LINE_SIZE];
cin.getline(line, LINE_SIZE);
  1. ์•„๋ฌด๊ฒƒ๋„ ์ฝ์ง€ ๋ชปํ–ˆ์„ ๋•Œ
  2. ํ•œ ์ค„์— ๋ฌธ์ž๊ฐ€ 256์ž ์ด์ƒ์ผ๋•Œ(๋ฒ„ํผ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๋•Œ)

C++ ์€ std::string์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ

#include <string>

std::string firstName;
std::cin >> firstName;
  • ์–ธ์ œ๋“  ๊ธธ์ด๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ์  ํ•จ์ˆ˜


string ๋ฐฐ์—ด ๋ฌธ์ž์—ด ๊ธธ์ด ์ฐพ์•„๋‚ด๊ธฐ

string A[] = {"1011","0010"};

cout << sizeof(A);      // 64 (์ „์ฒด ๋ฌธ์ž์—ด)
cout << sizeof(*A);     // 32 (8*4)

int size = sizeof(*A)/sizeof(A);

size(), length()

๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜

c_str()

C์Šคํƒ€์ผ(const char*)๋กœ string๋ฐ˜ํ™˜


๋Œ€์ž…๊ณผ ๋ง๋ถ™์ด๊ธฐ

// C

char firstName[20] = "POPE"l
char fullName[20];

// ๋Œ€์ž… - ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
strcpy(fullName, firstName);

// ๋ง๋ถ™์ด๊ธฐ - ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
strcat(fullName, " KIM");
// C++
string firstName = "POPE";
string fullName = "John Doe";

// ๋Œ€์ž…
fullName = firstName;

// ๋ง๋ถ™์ด๊ธฐ
fullName += " KIM";

๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ

// C
char firstName[20] = "POPE";
char lastName[20] = "KIM";
char fullName[40];

snprintf(fullName, 40, "%s %s", firstName, lastName);
// C++
string firstName = "POPE";
string lastName = "KIM";
string fullName;

fullName = firstName + " " + lastName;

๋น„๊ต์—ฐ์‚ฐ

// C
if (strcmp(firstName1, firstName2) == 0)
{
}
if (strcmp(firstName1, firstName2) > 0)
{
}
// C++
if (firstName1 == firstName2)
{
}
if (firstName1 > firstName2)
{
    // ์‚ฌ์ „์ƒ์˜ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
}

sstream(string stream)์— ๊ด€ํ•ด์„œ

  • std::istringstream

    • cin๊ณผ ๋น„์Šท, ํ‚ค๋ณด๋“œ๋ฅผ ๋Œ€์‹  string์œผ๋กœ ๋ถ€ํ„ฐ ์ฝ์–ด์˜จ๋‹ค.
    • sscanf()์™€ ๋น„์Šท(cf. scanf๋Š” ์ฝ˜์†”๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์˜ค๊ณ  sscanf๋Š” string์œผ๋กœ ๋ถ€ํ„ฐ ์ฝ์–ด์˜จ๋‹ค.)
  • std::ostringstream

    • cout๊ณผ ๋น„์Šท, ์ฝ˜์†” ๋Œ€์‹  string์— ์ถœ๋ ฅํ•œ๋‹ค.
    • sprintf์™€ ๋น„์Šท
  • cout, cin๋„ ์ŠคํŠธ๋ฆผ


๊ทธ๋ž˜์„œ string์ด ๋” ์ข‹์€๊ฐ€??

๋ฌธ์ž ๋ฐฐ์—ด ๊ธธ์ด์— ๊ด€ํ•ด ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค -> ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด : ํž™์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ (์ถ”๊ฐ€์ ์œผ๋กœ ํ• ๋‹น์„ ์œ„ํ•ด์„œ) ํฌ์ธํ„ฐ๋กœ ์ฒซ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”๋‹ค.(์ฐธ๊ณ ๋กœ c_str()์€ ์‹œ์ž‘๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(const char*)๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.)

  • ํž™ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚ด๋ถ€ ๋ฒ„ํผ์˜ ์ฆ๊ฐ€๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์–ด๋–ค ๋ถ„์•ผ์—์„œ ์“ธ ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ณ ๋ฏผํ•ด์„œ ์„ ํƒํ•ด์•ผํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ sprintf์™€ ํ•จ๊ป˜ char[]๋ฅผ ๋งค์šฐ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. -> ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฌธ์ œ์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.

์‚ฌ์šฉํ•˜๊ธฐ

// include header
#include <string>

์ƒ์„ฑ์ž

// ์ƒ์„ฑ์ž 1
string myString = "abcd";

// ์ƒ์„ฑ์ž 2
string mySTring;
mySTring = "abcd";

ํ™•์žฅ, ๋ฌธ์ž์—ด ์ถ”๊ฐ€

// ํ™•์žฅ, ๋ฌธ์ž์—ด ์ถ”๊ฐ€1
string base = "hello world!";
base += "x";

// ํ™•์žฅ, ๋ฌธ์ž์—ด ์ถ”๊ฐ€2
string base = "hellow world!";
base.append("appended!");

๋ฌธ์ž์—ด ๋ณต์‚ฌ

string src = "I am source :";
string dst;

dst = src;

๊ธธ์ด ํ™•์ธ

string base = "hello world!";
base.length();      // 13
base.size();        // 13

length์™€ size๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

capacity()

string base = "hello world!";
base.capacity();            // ํ•ด๋‹น string์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถœ๋ ฅ, ๋งŒ์•ฝ ๋ฌธ์ž์—ด์ด ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ ํ•ด๋‹น capacity๋ณด๋‹ค ํด ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌ ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.

max_size()

string base = "hello world!";
base.max_size();            // ์ตœ๋Œ€ ํ• ๋‹น๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ ๋ฆฌํ„ด

ํŠน์ •์œ„์น˜์˜ ๋ฌธ์ž ๋ฐ›๊ธฐ(charAt)

string base = "hello world!";
base.at(0);         // h
base.at(1);         // e

ํŠน์ • ๋ฌธ์ž ๊ฒ€์ƒ‰

string base = "hello world!";
base.find("world!");

if(base.find("world!)!=string::npos) {
    // world!๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ฐพ์•˜์„ ๊ฒฝ์šฐ
}

์ถ”๊ฐ€) ๋ฌธ์ž์—ด์ด ์™„์ „ํžˆ ๋™์ผํ•˜์ง€ ์•Š์•„๋„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•จ.

string base = "hello world!";

if(base.find("world!")!=string::npos) {
    printf("find world!\n");
}

if(base.find("wor")!=string::npos) {
    printf("find wor\n");
}
return 0;

string ๊ฐ„์˜ ๋ฌธ์ž์—ด ๋น„๊ต

string a = "I am string one!");
string b = "string"

if(a.compare(b)==0) {
    // ๋‘ ๋ฌธ์ž์—ด์ด ๊ฐ™์Œ
}
else if(a.compare(b)<0) {
    // a๊ฐ€ b๋ณด๋‹ค ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์ผ ๋•Œ
}
else if(a.compare(b)>0) {
    // a๊ฐ€ b๋ณด๋‹ค ์‚ฌ์ „์ˆœ์œผ๋กœ ๋’ค์ผ ๋•Œ
}

์ถ”๊ฐ€์ ์ธ ์‚ฌํ•ญ์€ ์ฐธ๊ณ ์‚ฌ์ดํŠธ๋ฅผ ํ™•์ธํ•˜์ž


const char* to string

char *cStr = "C++";
std::string Str = std::string(cStr);
โš ๏ธ **GitHub.com Fallback** โš ๏ธ