C ์ธ์ด - ๋ฌธ์์ด ์ด์ ๋ฆฌ | ๋ฌธ์์ด ๊ด๋ จ ํจ์ , ๋ฒํผ (buffer) ํฌ์ธํฐ ๋ฌธ์์ด (pointer) , ์ ๋ ฅ๊ฐ ๋ฐ๊ธฐ (scanf , EOF ,strlen)
- -
*๋ฌธ์์ด (string)
๋ฌธ์๋ char๋ก ์ ์ธํ๋ค. ํ๊ธ์๊ฐ ์๋ ์ฌ๋ฌ๊ฐ์ ๋ฌธ์๋ฅผ ๋ฌธ์์ด ์ด๋ผ๊ณ ํ๋ฉฐ, ๋ฌธ์์ด์ ์ ์ธ(์ ์ฅ)ํ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง์ด๋ค.
1) ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค. char *๋ณ์์ด๋ฆ = "๋ฌธ์์ด";
2) ๋ฌธ์์ด ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค. char ๋ณ์์ด๋ฆ[size] = "๋ฌธ์์ด"; (size๋ฅผ ๋น์๋๋ฉด ์์์ ๋ฌธ์์ด ํฌ๊ธฐ๋งํผ ํ ๋น๋๋ค.)
- 1)์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ํฌ์ธํฐ์ ํ ๋นํ์ง๋ง, 2)๋ ๋ฐฐ์ด ์์ ํ๋ํ๋์ ๋ฌธ์๊ฐ ์ ์ฅ๋๋ค.
- ํฌ์ธํฐ๋ก ์ ์ธํ๋, ๋ฌธ์์ด ๋ฐฐ์ด๋ก ์ ์ธํ๋ ๋ง์ง๋ง ์ธ๋ฑ์ค์๋ ๊ณต๋ฐฑ(NULL)์ด ๋ค์ด๊ฐ๋ค.
- ๋ฌธ์์ด ๋ณด๋ค , ๋ฐฐ์ด์ ๋ ํฐ size๋ก ์ ์ธํ๋ค๋ฉด, ๋ฌธ์๊ฐ ๋ค์ด๊ฐ๊ณ ๋จ๋ ๋๋จธ์ง๊ณต๊ฐ์ NULL ๋ก ์ฑ์์ง๋ค.
- int ๋ฐฐ์ด๊ณผ๋ ๋ฌ๋ฆฌ, ๋ฌธ์์ด ๋ฐฐ์ด์ ์ ์ธ ์ฆ์ ๋ฌธ์์ด๋ก ์ด๊ธฐํ ํด์ผํ๋ค.( ๋ฏธ๋ฆฌ ์ ์ธํด๋๊ณ ๋์ค์ ํ ๋นํ๋๊ฒ์ด ์๋๋ค.) -> ๋ฌธ์๋ฅผ ํ๋ํ๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํ์ฌ ์ง์ด๋ฃ๋๊ฒ์ ๊ฐ๋ฅํ๋ค. string[1] = "w", string[2] = "a";์ฒ๋ผ...
- ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์์ ๋ง์ง๋ง์ ์๋ฆฌ๊ธฐ ์ํด, ๋ง์ง๋ง์๋ Null๊ฐ์ ํฌํจํ๋ค. (null์ \0์ผ๋ก ํํํ๋ค.) ์๋ฅผ ๋ค๋ฉด printf()ํจ์๋ null์ ๋ง๋๋ฉด ์ถ๋ ฅ์ ๋ฉ์ถ๋ ์๋ฆฌ์ด๋ค.
ํฌ์ธํฐ๋ก ๋ฌธ์์ด ์ ์ธํ๊ณ ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
int main(){
char *string_1 = "Hello world";
printf("%s", string_1);
return 0;
}
์ถ๋ ฅํ ๋ ์์ ์ง์ ์๋ string ์ ์ฝ์์ธ s์ด๋ค. -> %s
ํฌ์ธํฐ๋ก ๋ฌธ์์ด ํฌ์ธํฐ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๊ธฐ
#include <stdio.h>
int main(){
char *string_1 = "abcd";
printf("%c\n",string_1[0]);
printf("%c\n",string_1[4]);
return 0;
}
- ๋ฌธ์์ด๋ ๋ฌธ์๋ค์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์, ์ธ๋ฑ์ค๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- "abcd"์ด๋ฏ๋ก, ๋ฌธ์๊ฐ ๋ค์ด์๋ ์ธ๋ฑ์ค๋ string_1[3] ๊น์ง์ด๋ค. string_1[4]์๋ NULL์ด ๋ค์ด์๋ค. (ํญ์ ๋ฌธ์์ด์ ๋งจ ๋ค์๋ NULL ์ด ๋ค์ด์๋ค.)
*๋ฌธ์์ด ์ ๋ ฅ๋ฐ๊ธฐ (scanf)
scanf ์์, ์์์ง์ ์๋ฅผ %s๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ฅ๊ฐ์ ๋ฐฐ์ด ํํ์ ๋ฌธ์์ด์ ์ ์ฅํ ์ ์๋ค.
๋ค๋ง, ์ ๋ ฅํ ๋ ๋์ด์ฐ๊ธฐ(๊ณต๋ฐฑ)์ด ์๋ค๋ฉด, ๊ณต๋ฐฑ ๋ฐ๋ก ์ง์ ๊น์ง๋ง ์ ๋ ฅ๋์ด ์ ์ฅ๋๋ค. ๊ณต๋ฐฑ์ ๋ง๋๋ฉด ๋ฌธ์์ด์ ๋์ด๋ผ๊ณ ์ธ์ํ๊ธฐ ๋๋ฌธ์..
#include <stdio.h>
int main(){
char s1[10] ;
printf("์
๋ ฅ ํ์ธ์");
scanf("%s",s1);
printf("%s", s1);
return 0;
}
-
(์ค์) ํฌ์ธํฐ ๋ฌธ์์ด์ ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฝ๊ธฐ ์ ์ฉ์ด๋ค. ๋ฐ๋ผ์, ์ ๋ ฅ ๊ฐ์ ๋ฌธ์์ด ํฌ์ธํฐ์ ์ ์ฅํ๋ ค๋ฉด, malloc์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ํ ๋ค์ ๋ฌธ์์ด์ ์ ์ฅํ๋ฉด ๋๋ค.
*EOF (End of File) ์ ๊ณต๋ฐฑ
- ํ์ผ์ ๋ ) ๋ ์ด์ ์ฝ์ ๊ฐ์ด ์๋ ์ํ๋ฅผ ๋งํ๋ค. ๊ทธ๋์ ์ฝ์์ฐฝ์์๋ Ctrl+Z (window) | Ctrl+D (linux)๋ฅผ EOF๋ผ๊ณ ์ ํด๋์๋ค.
- stdio.h์ ์ ์๋์ด์๋ EOF๋ ํ์ผ ์ฒ๋ฆฌ ํจ์๊ฐ ์คํจํ์๋ -1์ด ๋ฐํ๋๋ค.
EOF(end of file)
#include <stdio.h>
int main(){
int c = getchar(); // ๋ฌธ์ 1๊ฐ ์
๋ ฅ๋ฐ๋๋ค.
printf("%d\n", c);
printf("%d\n", EOF);
return 0;
}
์
๋ ฅ >>>>> ctrl+z
์ถ๋ ฅ >>>>> -1 -1
๋ฐ๋ผ์, ์ ๋ ฅ์ ๋ฐ๋ค๊ฐ ๊ณต๋ฐฑ์ ๋ง๋๋ฉด ๋ฌธ์๋ฅผ ์ฝ๋๊ฒ์ ๋ฉ์ถฅ๋๋ค. ์ด๋ ์์์ง์ ์ %[^\n]s ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณต๋ฐฑ๊น์ง ์ ๋ ฅ ๋ฐ์ ์ ์์ต๋๋ค.
#include <stdio.h>
int main(){
char s1[30];
printf("what is your name?");
scanf("%[^\n]s", s1);
printf("%s\n",s1);
}
*๋ฒํผ (buffer)
ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ฅํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์๋ C์ธ์ด ์์ฒด์ ์ผ๋ก ๋ฒํผ๋ฅผ ํตํ์ฌ
์ ๋ ฅ ์ถ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค.
*์ ๋ ฅ ๋ฒํผ๋ก ์ธํ ์ค๋ฅ ์์
#include <stdio.h>
int main(void){
int a;
char c;
scanf("%d", &a);
printf("%d\n", a);
scanf("%c", &c);
printf("%c\n", c);
return 0;
} // ์ํฐ๋ฅผ ์ณค์๋ \n ์ด ๋ฌธ์๋ก ์ธ์๋์๊ธฐ ๋๋ฌธ์, ์
๋ ฅ์ ํ๋ฒ๋ฐ์ ์๋ฐ๋๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
*๋จ์์๋ ์ ๋ ฅ ๋ฒํผ๋ฅผ ์ง์ฐ๊ธฐ ์ํ ์์
#include <stdio.h>
int main(void){
int a; char c;
scanf("%d", &a);
printf("%d\n",a);
int temp;
while((temp=getchar()) != EOF && temp!= '\n') {}
scanf("%c", &c),
printf("%c\n",c);
return 0;
}
ํ๊ธ์์ฉ ๋ฐ์์ ํ์ผ์ ๋(EOF= end of file)์ด๊ฑฐ๋ ๊ฐํ๋ฌธ์๋ฅผ ๋ง๋๋ฉด ์ ๋ ฅ์ ๋ฉ์ถ๋ฏ๋ก, ํญ์ ์ ๋ ฅ๋ฒํผ๋ฅผ ๋น์๋์์ ์๊ฒ๋๋ค.
*๋ฌธ์์ด๊ณผ ๊ด๋ จ๋ ํจ์๋ค
strlen(<๋ฌธ์์ด>) :๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
- string length์ ์ค์๋ง์ด๋ค. string.h ํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
- ๋ฌธ์์ด ๋ง์ง๋ง์ NULL์ ํฌํจ๋์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด์ด ๋ค์ด์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ์๋ ๋ฌด๊ดํ๊ฒ, ์์ํ๊ฒ ๋ฌธ์์ด์ ๊ธธ์ด๋ง์ ๋ฐํํ๋ค.
#include <stdio.h>
#include <string.h>
int main(void){
char a[20] = "Apple banana";
printf("string's length: %d\n", strlen(a));
return 0;
}
strcmp(๋ฌธ์์ด1, ๋ฌธ์์ด2) : ๋ฌธ์์ด์ด ๊ฐ์์ง ๋น๊ตํ๋ค.
- string compare (๋ฌธ์์ด ๋น๊ตํ๋ค)์ ์ค์๋ง์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก string.h ํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
- ๋ฌธ์์ด์ด ๊ฐ๋ค๋ฉด 0์ ๋ฐํํ๋ค.
- ๋ฌธ์์ด1์ด ASCII์ฝ๋์์ผ๋ก ๋ ํฌ๋ฉด 1์ ๋ฐํํ๋ค. (์ฆ, ๋ฌธ์์ด1์ด ์ฌ์ ์์ผ๋ก ๋ค์ ์์ผ๋ฉด 1์ ๋ฐํํ๋ค.)
- ๋ฌธ์์ด2๊ฐ ASCII์ฝ๋์์ผ๋ก ๋ ํฌ๋ฉด -1์ ๋ฐํํ๋ค. (์ฆ, ๋ฌธ์์ด2๊ฐ ์ฌ์ ์์ผ๋ก ๋ค์ ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.)
#include <stdio.h>
#include <string.h>
int main(void){
char a[20] = "apple banana";
char b[20] = "you jun young";
printf("string a,b์ ์ฌ์ ์ ๋น๊ต :%d",strcmp(a,b));
return 0;
}
strcpy(๋ฌธ์์ด1, ๋ฌธ์์ด2) : ๋ฌธ์์ด2๋ฅผ ๋ฌธ์์ด 1์ ๋ณต์ฌํด์ ๋ฃ๋๋ค.
- string copy์ ์ค์๋ง์ด๋ฉฐ, string.h ํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
- ์ฑ๊ณต์ ์ผ๋ก ๋ณต์ฌํด์ ๋ฃ๊ธฐ ์ํด์๋ ๋ชจ๋ ๋ฌธ์์ด์ ๋ถ์ด์๋ ๋ง์ง๋ง NULL ๊น์ง ๋ค์ด๊ฐ ์ ์๋ ํฌ๊ธฐ์ฌ์ผํ๋ค.
- ํฌ์ธํฐ ๋ฌธ์์ด์ ์ฝ๊ธฐ ์ ์ฉ์ด๋ค. ๋ฐ๋ผ์ strcpyํจ์์๋ ๋ฏธ๋ฆฌ ์ ์ธ๋ ํฌ์ธํฐ ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ง์ฝ, ํฌ์ธํฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ค๋ฉด, malloc์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋ค์ strcpy๋ฅผ ์ฌ์ฉํด ์ฃผ์ด์ผํ๋ค.
#include <stdio.h>
#include <string.h>
int main(void){
char a[20] = "My name";
char b[20] = "is sam";
strcpy(b,a);
printf("๋ณต์ฌ๋ ๋ฌธ์์ด: %s\n",b);
return 0;
}
strcat(๋ฌธ์์ด1, ๋ฌธ์์ด2) : ๋ฌธ์์ด 1์ ๋ฌธ์์ด 2๋ฅผ ๋ํ๋ค. (์ด์ด ๋ถ์ธ๋ค)
- string concatenate ์ ์ค์๋ง. string.h ํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
- ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ด๋๋ผ๋ ๋ชจ์๋ผ์ง ์์์ผ ํ๋ค.
#include <stdio.h>
#include <string.h>
int main(void){
char a[20] = "my name is";
char b[20] = " banana";
strcat(a,b);
printf("%s\n",a);
return 0;
}
strchr(๋ฌธ์์ด1, ๋ฌธ์1) : ๋ฌธ์์ด1์์ , ๋ฌธ์1๋ก ์์ํ๋ ๋ฌธ์์ด์ ์์น(ํฌ์ธํฐ) ๋ฅผ ๋ฐํํ๋ค.
- string character ์ ์ค์๋ง, string.h ํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
- strchr์ ๋ฌธ์์ด์ ์์(์ผ์ชฝ)๋ถํฐ ๊ฒ์ํ์ง๋ง, strrchr์ ์ค๋ฅธ์ชฝ๋ถํฐ ๊ฒ์ํ๋ค.
#include <stdio.h>
#include <string.h>
int main(){
char a1[20] = "my name is jy";
char *ptr = strchr(a1, 'i');
printf("%s", ptr);
}
์ถ๋ ฅ >>>>>> is jy
strstr(๋ฌธ์์ด1, ๋ฌธ์์ด2) : ๋ฌธ์์ด 1์ ๋ฌธ์์ด 2๊ฐ ํฌํจ๋์ด ์๋์ง, ์๋ค๋ฉด ๊ทธ ์ฃผ์๋ถํฐ ๋ค๊น์ง ์ญ ๋ฐํ๋๋ค.
- string string์ ์ค์๋ง , string.hํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
#include <stdio.h>
#include <string.h>
int main(void){
char a[20] = "My name is apple";
char b[20] = "is";
printf("์ฐพ์ ๋ฌธ์์ด : %s", strstr(a,b));
return 0;
}
์ถ๋ ฅ >>>>>> ์ฐพ์ ๋ฌธ์์ด : is apple
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ, "n"์ผ๋ก ์์ํ๋ ๋ฌธ์์ด ๋ชจ๋ ์ถ๋ ฅํ๊ธฐ.
#include <stdio.h>
#include <string.h>
int main()
{
char str1[30] = "abcdefg abcdef abcd abc ab a";
char *pointer = strchr(str1, 'b');
while(pointer != NULL)
{
printf("%s\n", pointer);
pointer = strchr(pointer + 1, 'b');
}
return 0;
}
sprintf(๋ฐฐ์ด , ์์, ๊ฐ):์ํ๋ ์์๋๋ก ๋ฌธ์์ด์ ์ ์ฅํ๋ค.
- ์๋ ์ฝ๋์์ , ๋ฐฐ์ด s1์ sprintfํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ๊น์ง๋ ๋น ๋ฐฐ์ด์ด์๋ค. ์ด๋ฌํ ๋ฌธ์์ด์ ์ ์ฅํ ๋น ๋ฐฐ์ด์ ๋ฒํผ(buffer)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ํฌ์ธํฐ ๋ฐฐ์ด์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
#include <stdio.h>
int main(){
char s1[20];
sprintf(s1, "I'm %d years old", 17);
printf("%s",s1);
return 0 ;
}
strtok(๋์๋ฌธ์์ด, ๊ธฐ์ค๋ฌธ์):๊ธฐ์ค๋ฌธ์๋ก ๋ฌธ์์ด์ ์๋ฅธ๋ค.
- string tokenize ์ ์ค์๋ง, string.h ํค๋ํ์ผ์ ์ ์ธ๋์ด์๋ค.
- ์๋ฅผ๋ค์ด "the red apple" ์ " " ๊ธฐ์ค์ผ๋ก ์๋ฅด๋ฉด, 3๊ฐ๋ก ์ชผ๊ฐ์ด์ง๋ค.
'๐ฉโ๐ป C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
-
C์ธ์ด - ์ ์ ์๋ฃํ | ์ต๋๊ฐ ์ต์๊ฐ , sizeof ์ฐ์ฐ์ ( <limits.h> <stdint.h> ) 2020.10.17
-
C ์ธ์ด - ์ ์, ์ค์์ ์ค๋ฒํ๋ก์ฐ, ์ธ๋ํ๋ก์ฐ (overflow , underflow) 2020.10.17
-
C ์ธ์ด - ํฌ์ธํฐ ์ด์ ๋ฆฌ (Pointer) | void , ์ด์ค ํฌ์ธํฐ , ์ญ์ฐธ์กฐ 2020.02.29
-
C ์ธ์ด - ๋ฐฐ์ด (array ) , 2์ฐจ์ ๋ฐฐ์ด, ๋ฐฐ์ด์ ํฌ์ธํฐ (pointer) 2020.02.29
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค