비교 차트
비교의 근거 | 문자 배열 | 끈 |
---|---|---|
기본 | 문자 배열은 문자 데이터 유형의 변수 모음입니다. | 문자열은 클래스이고 문자열의 변수는 클래스 "문자열"의 객체입니다. |
통사론 | char array_name [size]; | string string_name; |
색인 생성 | 문자 배열의 개별 문자는 배열의 해당 색인을 통해 액세스 할 수 있습니다. | 문자열에서 특정 문자는 "string_name.charAt (index)"함수로 액세스 할 수 있습니다. |
데이터 형식 | 문자 배열은 데이터 유형을 정의하지 않습니다. | 문자열은 C ++에서 데이터 유형을 정의합니다. |
연산자 | C ++의 연산자는 문자 배열에 적용 할 수 없습니다. | 문자열에 표준 C ++ 연산자를 적용 할 수 있습니다. |
경계 | 배열 경계는 쉽게 오버런됩니다. | 경계가 넘치지 않습니다. |
접속하다 | 빠른 액세스. | 느린 접근. |
문자 배열의 정의
문자 배열은 "char"데이터 유형의 변수 모음입니다. 그것은 1 차원 배열이나 2 차원 배열이 될 수 있습니다. "널 종료 문자열"이라고도합니다. 문자 배열은 연속적인 메모리 주소에 저장된 문자 시퀀스입니다. 문자 배열에서 특정 문자는 해당 색인을 통해 액세스 할 수 있습니다. "널 문자"는 문자 배열을 종료합니다.
문자 배열의 예를 들어 봅시다 :
char name [] = { 'A', 'j', 'a', 'y', '\ 0'}; 또는 char name [] = "Ajay";
여기서 "char"는 문자 데이터 유형이고 "name"은 문자 배열의 변수 이름입니다. 문자 배열을 초기화하는 두 가지 방법을 보여 줬습니다. 첫 번째 방법에서는 null이 명시 적으로 언급되고 두 번째 방법에서는 컴파일러에서 자동으로 null을 삽입합니다.
문자열의 끝은 항상 널 문자입니다. 문자 배열의 종료 문자입니다. 문자 배열은 내장 데이터 유형이 아닙니다. 우리는 그것을 선언함으로써 문자 배열을 생성한다. 문자 배열에는 표준 연산자를 적용 할 수 없습니다. 문자 배열을 처리하려면, (strlen (), strlwr (), strupr (), strcat ())과 같은 내장 함수가 있습니다. 표준 연산자는 문자 배열에 적용 할 수 없으므로 표현식에 참여할 수 없습니다.
문자 배열에 대한 문자 포인터를 만들 수도 있습니다.
예를 들어 이해해 봅시다.
char s1 [] = "Hello"; char s2 [] = "선생님"; s1 = s1 + s2; // 오류 연산자를 적용 할 수 없습니다. s2 = s1; // 오류 문자 포인터 char * s = "Morning"; char * p; p = s; // 실행합니다.
위의 예에서는 두 개의 문자 배열 s1, s2와 두 개의 문자 포인터 s와 p를 선언했습니다. 문자 배열 s1과 s2가 초기화되면, 덧셈 연산자 (+) 나 대입 연산자가 문자 배열에서 작동하지 않음을 알 수 있습니다. 그러나 문자 포인터는 다른 문자 포인터에 할당 될 수 있습니다.
문자 배열이 초기화되면 다른 문자 집합으로 다시 초기화 할 수 없다는 것을 기억하십시오. 문자 배열 또는 null로 끝나는 문자열에 대한 액세스는 C ++의 문자열과 비교하여 빠릅니다.
문자열의 정의
문자열은 C ++의 기본 제공 데이터 유형이 아닙니다. 이것은 "string"유형의 클래스 객체입니다. C ++ 에서처럼 클래스를 만드는 것은 "유형"을 만드는 것과 같습니다. "string"클래스는 C ++ 라이브러리의 일부입니다. 문자 또는 문자 배열 전체를 보유합니다. 표준 문자열 클래스를 개발하는 데에는 세 가지 이유가 있습니다.
- 첫 번째 는 "일관성"입니다. 문자 배열은 데이터 유형이 아닙니다.
- 두 번째 는 "편리함"입니다. 문자 배열에서 표준 연산자를 사용할 수 없습니다.
- 세 번째 는 "안전"이며, 배열 경계는 쉽게 오버런됩니다.
예를 들어 문자열을 이해해 보겠습니다.
문자열 s1; s1 = "여보세요"; 문자열 s2 ( "Good morning"); string s3 = "Hennery"; 문자열 s4;
위의 선언에서 네 개의 문자열 변수 또는 객체 (s1, s2, s3, s4)가 선언됩니다. 위의 선언에서 문자열을 초기화하는 세 가지 방법을 보여 줬습니다. 문자열 s1이 선언되고 별도로 초기화됩니다. 캐릭터 라인 s2는 클래스 "String"의 생성자에 의해 초기화됩니다. s3 문자열은 선언시 일반 데이터 형식으로 초기화됩니다. 우리는 표준 연산자를 문자열 변수에 적용 할 수 있습니다.
s4 = s1; // 하나의 문자열 객체를 다른 객체에 할당 s4 = s1 + s2; // 두 개의 문자열을 추가하고 결과를 세 번째 문자열에 저장 if (s3> s2) // 두 문자열을 비교 문자열 s5 (s1); 기존 문자열 객체를 사용하여 새 문자열 객체 만들기
위의 코드에서 문자열에 다양한 연산자가 적용되고 다양한 연산이 수행됩니다. 첫 번째 명령문은 한 문자열 객체를 다른 문자열 객체로 복사합니다. 두 번째 명령문에서는 두 개의 문자열이 연결되어 세 번째 문자열에 저장됩니다. 세 번째 문에서는 두 개의 문자열이 비교됩니다. 네 번째 문에서는 기존 문자열 개체를 사용하여 새 문자열 개체가 만들어집니다.
문자열에 대한 액세스는 문자 배열 또는 null로 끝나는 문자열과 비교할 때 느립니다.
문자 배열과 문자열의 주요 차이점
- 문자 배열은 문자 데이터 유형의 변수 집합입니다. String은 문자열을 선언하기 위해 인스턴스화되는 클래스입니다.
- 인덱스 값을 사용하여 문자 배열의 문자에 액세스 할 수 있습니다. 반면에 문자열의 특정 문자에 액세스하려면 함수 문자열 's_name.charAt (index)를 사용하여 액세스 할 수 있습니다.
- 마찬가지로 배열은 데이터 유형이 아니기 때문에 문자도 데이터 유형이 아닙니다. 반면에 String은 클래스가 참조 유형으로 사용되므로 문자열은 데이터 유형이라고 할 수 있습니다.
- 문자 배열에는 연산자를 적용 할 수 없지만 String에는 연산자를 적용 할 수 있습니다.
- 배열 문자 배열은 길이가 고정되어 있고 경계가 쉽게 오버런 될 수 있습니다. 여기서 String에는 경계가 없습니다.
- 배열 요소는 연속적인 메모리 위치에 저장되므로 문자열 변수보다 빠르게 액세스 할 수 있습니다.
결론:
문자 배열을 조작 할 수 없으면 표준 문자열 클래스가 개발되었습니다.