๋ฌธ์์ด ํจ์์ค์ strtok()ํจ์๊ฐ ์๋ ๋ฌธ์์ด์์ ํน์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์๋ฅผ ์ชผ๊ฐค ์ ์๋๋ฐ ์ด ์๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ๋ค์ํ ์ฌ๋ฐ๋ ์คํ์ ํ ์ ์๋๋ฐ ๊ทธ ์ค CSV ๋ฐ์ดํฐ ํ์์ ๊ฐ๋จํ ๊ณ์ฐํ๋ ๊ฐ๋จํ ์คํ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
string.h ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ก์ ๋ฌธ์์ด์ ๋๋๋ ํจ์์ ๋๋ค. ํจ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
strtok(๋ฌธ์์ด,"ํน์๋ฌธ์๋ค")
๋ฌธ์์ด์ ํน์๊ธฐํธ๋ฌธ์ ๊ณต๋ฐฑ(' '), ์ฝค๋ง(,), ์ (.) ๋ฑ ๋ค์ํ ํน์๊ธฐํธ๋ฌธ์๋ค๋ก ์๋ณธ ๋ฌธ์์ด์์ ์ชผ๊ฐค ์ ์์ต๋๋ค.
๊ฐ๋ น, ๋ค์๊ณผ ๊ฐ์ ํํ์ ํ์ ๋๋ฅผ ์ดํด ๋ด ์๋ค.
p = strtok("Hello World!"," ");
p์ "Hello"๋ผ๋ ๋ฌธ์์ด์ ์ถ์ถํ๊ฒ ๋ฉ๋๋ค. ๊ณต๋ฐฑ(' ')๋ฌธ์๊ฐ ์๋ ์์น์์ ์ชผ๊ฐ์ ์์ "Hello" ๋ฌธ์์ด์ ์ป๊ฒ ๋๋ ๊ฒ์ด์ฃ .
p = strtok("Hello World!"," ");
p = strtok(NULL," ");
์ด๋ ๊ฒ ํ๋ฉด ์ฒซ๋ฒ์งธ๋ "Hello"๋ฌธ์์ด์ด ๋ฑ๋ก๋๋๋ฐ ๋๋ฒ์งธ๋ NULL๋ฅผ ํ๋ฉด p์ ํฌ์ธํฐ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ๊ทธ๋ฆฌ๊ณ NULL๋ก "Hello" ๋ฌธ์์ด์ ์ป๊ณ ๊ทธ ๋ค์์ NULL๋ก ๋ฌธ์์ด์ ๋์ ๋๋๊ฒ ๋๊ณ ๋ค์ "World!" ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ๊ณต๋ฐฑ(' ')๋ฌธ์๋ฅผ ๋น๊ตํด์ ์ถ์ถํ๋๋ฐ ๋์ด์ ์์์ผ๋ก ๋๋จธ์ง ๋ฌธ์์ด "World!"๋ผ๋ ๋จ์ด๋ฅผ p๊ฐ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
์ค๋ช ์ด ์ข ์ ๋งคํ๊ธฐ๋ ํ๋ฐ ์ค์ ์ฝ๋ฉ์ ์คํํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์ดํดํ๋๋ก ํ์ฃ .
[์ฝ๋ฉ]
#include
#include
int main(void)
{
char a[20] = "Hello World!";
char* p;
p = strtok(a," ");
printf("%s\n", p);
p = strtok(NULL," ");
printf("%s\n", p);
return 0;
}
[๊ฒฐ๊ณผ]
๊ฒฐ๊ณผ๋ฅผ ๋ณด์๋ฉด ๋์ถฉ ์ด๋ค ๋๋์ธ์ง ์์๊ฒ ์ง์.
ํน์ ๊ธฐํธ๋ก ๋ฌธ์์ด์ ์ชผ๊ฐ์ ๋ฌธ์์ด์ ๋๋๋ค๋ฉด ๋ฐ์ดํฐํ์ผ ๊ฐ์ ๊ฒ๋ค์ ์ฝ์ด์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ฐ ์ด์ฉํ๋ฉด ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค๋๊ตฐ์. ์ฐธ๊ณ ๋ก csv ๋ฐ์ดํฐ ํ์ผ ๊ฐ์ ๊ฑธ ์ฝ์ด์์ ์ด ํจ์๋ฅผ ์ด์ฉํ๋ฉด ์ฌ๋ฐ๋ ๊ณ์ฐ์ ํ ์ ์๊ฒ ๋๊ตฐ์. ์คํ์์๋ ํ์ผ ์ฝ๊ธฐ๊น์ง ๋ค์ด๊ฐ๋ฉด ๋๋ฌด ์ฃผ์ ์์ ๋ฒ์ด๋ ๊ฒ ๊ฐ๊ณ ์ฝ๋ฉ์ด ๊ธธ์ด์ง์ผ๋ก ๋ฌธ์์ด ๋ณ์์ ํ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝค๋ง(,)๋ก ๊ตฌ๋ถํ์ฌ ์ ์ฅํด ๋๊ณ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถ์ ์ฝค๋ง(,)๋ก ์ชผ๊ฐ์ฌ ๋ฐฐ์ด ๋ณ์์ ์ ์ฅํ์ฌ ๊ฐ๋จํ ์ฒ๋ฆฌํ๋ ์ฝ๋ฉ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
char a[20] = "10,20,30,40,50";
์์ ๊ฐ์ด ๋ฌธ์์ด ๋ณ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ฝค๋ง(,)๋ก ์ชผ๊ฐ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋ฉ์ ํด์ผ๊ฒ ์ง์.
p = strtok(a, ",");
while(p != NULL){
p=strtok(NULL, ",");
}
์ด๋ ๊ฒ while()๋ฌธ์ผ๋ก ์์ฐจ์ ์ผ๋ก p๋ผ๋ ํฌ์ธํฐ ๋ณ์์ ์ฝค๋ง(,)์ชผ๊ฐ์ง ๋ฌธ์์ด์ด ์ ์ฅ ๋ฉ๋๋ค.
๋ฌธ์์ด p๊ฐ์ ์ซ์ํ์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค.
์ง๋์๊ฐ์ ๋ค๋ฃฌ atoi()ํจ์๋ก ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํ ํ ์ ์์ต๋๋ค.
p = strtok(a, ",");
while(p != NULL){
b[cnt]=atoi(p);
cnt++;
p=strtok(NULL, ",");
}
์ด๋ ๊ฒ ํ๋ฉด b[]๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ๊ฐ๋ค์ด ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
ํฉ๊ตฌํ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
for(i=0;i<cnt;i++){
sum+=b[i];
}
์ด๋ ๊ฒ CSV ๋ฐ์ดํฐ ๊ฐ์ ๊ฒ์ ๋ฌธ์์ด ๋ผ์ธ์ผ๋ก ์ฝ์ด์์ ๊ตฌ๋ถ์ ์ฝค๋ง(,)๋ก ์ชผ๊ฐ๊ณ ๋ค์ ์ชผ๊ฐ์ง ๋ฌธ์์ด์ ์ซ์ํ์ผ๋ก ๋ฐ๊ฟ์ ํฉ์ ๊ตฌํด ๋ณด์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ๋์์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก๋์ง ์คํ์ ์์ผ๋ด์ผ ๊ฒ ์ฃ .
[์ฝ๋ฉ]
#include
#include
#include
int main(void)
{
char a[20] = "10,20,30,40,50";
int b[5]={0,0,0,0,0};
char* p;
int cnt = 0;
int i=0;
int sum=0;
p = strtok(a, ",");
while(p != NULL){
b[cnt]=atoi(p);
cnt++;
p=strtok(NULL, ",");
}
for(i=0;i<cnt;i++){
sum+=b[i];
printf("%d\n",b[i]);
}
printf("ํ ํฐ์ : %d , ํฉ : %d\n", cnt, sum);
return 0;
}
[๊ฒฐ๊ณผ]
strtok()ํจ์๋ ํ๋์ ํน์๊ธฐํธ๋ก๋ง ์ชผ๊ฐ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ํน์๊ธฐํธ๋ก ์ชผ๊ฐค ์ ์์ต๋๋ค.
์์ ๋ก ์ดํด๋ด ์๋ค.
[์ฝ๋ฉ]
#include
#include
int main(void)
{
char a[20] = "1-2?3,4}5";
char* p;
p = strtok(a,"-?,}");
while(p != NULL){
printf("%s\n", p);
p = strtok(NULL,"-?,}");
}
return 0;
}
strtok(a,"-?,}") ํจ์๋ก ์ด 4๊ฐ์ ํน์ ๊ธฐํธ๋ค์ด ์๋์ง ์ฒดํฌํ๊ฒ ๋ฉ๋๋ค. ์ฝ๊ฒ๋งํด์, ํ๊ฐ ์ด์์ ์ฒดํฌํ ์ ์๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
[๊ฒฐ๊ณผ]
์ค๋์ ๋ฌธ์์ด ์ชผ๊ฐ๊ธฐ ์คํ์ ํ๋ค์. post๋ฅผ ์์ฑํ๋ค ๋ณด๋ ์ข ๊ธธ์ด์ ธ์ ๋ฌธ์์ด ์ชผ๊ฐ๊ธฐ ํจ์ ๊ตฌํ์ ๋ชปํด๋ดค๋ค์. ํธ๊ธฐ์ฌ์ด ์๋ ๋ถ๋ค์ด๋ผ๋ฉด ํ๋ฒ ๋์ ํด ๋ณด์ธ์.