C++/summary

문자열의 표현 && 유용한 문자열 함수들.

gandus 2010. 4. 29. 12:16
문자열이란 ?  
  : 문자열 코드값들 + NULL 값

문자열 상수 = > 시작주소값 반환.
"Hello(NULL) ";    널까지 포함된다. 


문자열


1. 배열을 이용 : 데이터를 복사 함으로써 자신의 공간을 할당받기때문에 변경 가능하다.

char s[] = "hello";

*s = 'T';


2. 포인터변수를 이용 : 원본을 참조만 하기 때문에..  "Hello" 는 문자열 상수이기 때문에 변경 불가능

char *p = "hello";
*p = 't';// 변경이 불가능하다.       // 주소값을 참조만 하기 때문에.

char *q= s; 

*q = 't'; // 이건 변경가능하다.


문자열 집합을

"hello" , "android", "gandus" , "bye" 이걸 저장하려면

2차원 배열을 이용

char s[7][10] = {"hello" , "android", "gandus" , "bye"} ;

strcpy(s[0], "Mon");  //   이것은 변경이 가능하다.


스왑 할려면

char temp[10];    // 배열을 복사받아서,... 스왑가능.

strcpy (temp, s[i]);
strcpy (s[i], s[j]);
strcpy (s[j], s[i]);




포인터 배열을 이용

char * s[7] = {"hello" , "android", "gandus" , "bye"};   // 28바이트의 공간, 7개의 주소를 담고있다.

strcpy(s[0] , "mon"); // 이것은 불가능하다. 복사를 할수 없기때문.

p[0] = "Mon"   // 이것은 가능하다. 주소를 변경하는것이라..


s[i], s[j] 를 스왑할려면

char *temp;  // 주소를 이용하면 스왑가능.

temp = p[i];
p[i]=p[j];
p[j] = temp;




3. 배열 이름에 대입은 불가능

char p[20];

p = "hello";    //불가능하다.  
                  // p는 배열의 시작주소, 상수 값이라.....

strcpy( p, "hello")  의 함수 형식은

void strcpy( char *d , const char * s);    // 이런형식의 문제가 나온다.

4. STRTOK ( s, " " ) // 처음 호출시
그 다음부터는 strtok( NULL,  " " ) ; // 이전의 배열을 사용한다는 뜻이다.