문자열 비교: C 프로그래밍

String Comparison C Programming



C 언어의 문자열은 널 문자()로 끝나는 문자 배열입니다. 이 속성을 사용하여 문자열을 비교합니다.







두 문자열은 다양한 방식으로 비교할 수 있습니다. 이 자습서에서는 먼저 두 문자열을 비교하는 사용자 정의 함수를 보고 두 문자열을 매우 쉽게 비교하는 데 사용할 수 있는 몇 가지 내장 라이브러리 함수를 볼 것입니다. 시작하겠습니다.



사용자 정의 함수를 사용한 문자열 비교:

우리는 함수를 작성할 것입니다 문자열 비교() 문자열을 비교합니다. 우리는 문자열을 순회하고 문자열의 각 문자를 하나 또는 둘 다의 끝에 도달하거나 일치하지 않는 하나가 발견될 때까지 비교합니다. 순회가 두 문자열의 끝에 도달하면 문자열이 일치합니다. 그렇지 않으면 문자열이 일치하지 않습니다.



01./*userDefinedFunction.c*/
02.
03.#포함하다
04.
05.정수문자열 비교( str1[ ], str2[ ] )
06.{
07.정수NS=0;
08.
09. 동안(str1[NS] ==str2[NS] )
10.
열 다섯.
16.만약(str1[NS] == ' 0' &&str2[NS] == ' 0' )
17.반품 0;
18.또 다른
19.반품 -1;
스물.
이십 일.}
22.
2. 3.
24.정수기본()
25.{
26.str1[30],str2[30];
27.
28. 인쇄 ('첫 번째 문자열을 입력하세요: ');
29. 스캔 ('% [^N]% * 씨 ',str1);
30. 인쇄 ('두 번째 문자열을 입력하세요: ');
31. 스캔 ('% [^N]% * 씨 ',str2);
32.
33.만약(문자열 비교(str1,str2) == 0)
3. 4. 인쇄 ('문자열은 같음N');
35.또 다른
36. 인쇄 ('문자열이 같지 않습니다N');
37.
38.반품 0; 39.}





여기서 우리는 while 루프와 변수를 사용하여 문자열을 순회합니다. NS . 두 문자열의 같은 위치에 있는 문자가 같을 때의 값은 NS 1씩 증가합니다(13행). 문자가 같지 않거나(09행) 문자열의 끝에 도달하면(11행), while 루프는 중단됩니다. while 루프 후에 우리는 두 문자열 순회가 모두 끝에 도달했는지 여부를 확인합니다(16행). 순회가 두 문자열의 끝에 도달하면 문자열은 동일하지 않으면 동일하지 않습니다.

내장 라이브러리 함수를 사용한 문자열 비교:

다음 라이브러리 함수를 문자열 비교에 사용할 수 있습니다. 모든 기능은 다음에서 선언됩니다. 문자열.h 헤더 파일.



strcmp() 함수:

이 함수는 함수에 전달된 두 문자열을 비교합니다.

통사론 :

정수 strcmp (상수 *str1, 상수 *str2)

반환 값: 문자열이 같으면 0을 반환합니다. 첫 번째 문자열의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열보다 작으면 음의 정수를 반환합니다. 첫 번째 문자열의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열보다 크면 양의 정수를 반환합니다. 일부 시스템은 첫 번째 불일치 문자의 ASCII 값의 차이를 반환하고 일부 시스템은 첫 번째 문자열의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열보다 작으면 -1을 반환하고 첫 번째 일치하지 않는 문자의 ASCII 값이 1이면 1을 반환합니다. 첫 번째 문자열이 두 번째 문자열보다 큽니다.

예시 반환 값 설명
strcmp( Hello World, Hello World ) 0 두 개의 문자열이 동일합니다.
strcmp( 안녕하세요 Hello World ) 0 문자열은 문자 ''까지 비교됩니다. 기본적으로 첫 번째 문자열은 ''으로 끝나고 두 번째 문자열은 'Hello' 뒤에 '' 문자를 포함합니다.
strcmp( Hello″,Hello World ) 0 문자열은 문자 ''까지 비교됩니다.
strcmp( 헬로월드 헬로월드 ) 음의 정수 첫 번째 문자열('H')의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열('h')보다 작습니다.
strcmp( 안녕하세요 세계, 안녕하세요 세계 ) 양의 정수 첫 번째 문자열('h')의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열('H')보다 큽니다.

strncmp() 함수:

이 기능은 기능과 유사합니다. strcmp() 하지만 여기서 함수에 추가 인수를 전달하여 비교되는 바이트 수를 지정해야 합니다.

통사론:

정수 strncmp (상수 *str1, 상수 *str2, size_tN)

반환 값: 함수 반환 0 첫 번째 경우 N 두 문자열의 문자가 동일합니다. 그렇지 않으면 첫 번째 불일치 문자의 ASCII 값 간의 차이의 부호에 따라 음수 또는 양의 정수를 반환합니다.

예시 반환 값 설명
strncmp( Hello World,Hello World,5 ) 0 처음 5개의 문자는 동일합니다.
strncmp( Hello,Hello World,5 ) 0 처음 5개의 문자는 동일합니다.
strncmp( Hello″,Hello World,8 ) 0 ''은 두 문자열의 처음 5자 뒤에 있습니다. 따라서 비교는 8이 아닌 5 이후에 중지됩니다.
strncmp( Hello World, Hello World,5 ) 음의 정수 첫 번째 문자열('H')의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열('h')보다 작습니다.

strcasecmp() 함수:

이 기능은 기능과 유사합니다. strcmp() , 그러나 여기서 문자열은 대소문자를 구분하지 않습니다.

통사론:

정수strcasecmp(상수 *str1, 상수 *str2)

반환 값: 와 동일 strcmp() , 그러나 문자열은 다음과 같이 처리됩니다. 대소문자 구분 .

예시 반환 값 설명
strcasecmp( Hello World, Hello World ) 0 두 개의 문자열이 동일합니다.
strcasecmp( 안녕하세요 Hello World ) 0 문자열은 문자 ''까지 비교됩니다. 기본적으로 첫 번째 문자열은 ''으로 끝나고 두 번째 문자열은 'Hello' 뒤에 '' 문자를 포함합니다.
strcasecmp( 헬로월드 헬로월드 ) 0 문자열은 대소문자를 구분합니다. 따라서 Hello World와 Hello World는 동일합니다.

strncasecmp() 함수:

이 기능은 기능과 유사합니다. strncmp() , 그러나 여기서 문자열은 대소문자를 구분하지 않습니다.

통사론:

정수strncasecmp(상수 *str1, 상수 *str2)

반환 값: 와 동일 strncmp() , 문자열이 대소문자를 구분하는 것으로 처리되는 경우.

예시 반환 값 설명
strncasecmp( Hello World,Hello World,5 ) 0 처음 5개의 문자는 동일합니다.
strncasecmp( Hello,Hello World,5 ) 0 처음 5개의 문자는 동일합니다.
strncasecmp( Hello″,Hello World,8 ) 0 ''은 두 문자열의 처음 5자 뒤에 있습니다. 따라서 비교는 8이 아닌 5 이후에 중지됩니다.
strncasecmp( Hello World, Hello World,5 ) 0 문자열은 대소문자를 구분합니다. 따라서 Hello와 Hello는 동일합니다.

memcmp() 함수:

이 함수는 두 개의 메모리 블록을 바이트 단위로 비교합니다. 메모리 블록의 두 포인터와 비교할 바이트 수를 전달해야 합니다.

통사론:

정수 memcmp (상수 무효의 *str1, 상수 무효의 *str2, size_tN)

반환 값: 두 개의 메모리 블록( N 바이트)는 동일합니다. 그렇지 않으면 첫 번째 불일치 바이트 쌍 간의 차이를 반환합니다(바이트는 부호 없는 char 개체로 해석된 다음 int로 승격됨).

예시 반환 값 설명
memcmp( Hello World,Hello World,5 ) 0 처음 5개의 문자는 동일합니다.
memcmp( Hello″,Hello World,8 ) 음의 정수 처음 6개의 문자는 동일하지만 7번째 문자는 다릅니다. 여기 비교가 멈추지 않았습니다. strncmp() '' 문자를 받을 때.
memcmp( Hello World, Hello World,11 ) 음의 정수 첫 번째 문자열('H')의 첫 번째 일치하지 않는 문자의 ASCII 값이 두 번째 문자열('h')보다 작습니다.

예시:

다음은 논의된 모든 기능의 C 코드 예제입니다.

01./*문자열 비교.c*/
02.
03.#포함하다
04.#포함하다
05.
06.정수기본()
07.{
08. 인쇄 ('strcmp( '헬로월드','헬로월드' ) => %dN', strcmp ( '헬로월드','헬로월드' ));
09. 인쇄 ('strcmp( '안녕하십니까','안녕하십니까\0세계' ) => %dN', strcmp ( '안녕하십니까','안녕하십니까 0세계' ));
10. 인쇄 ('strcmp( '헬로월드','안녕하세요 세계' ) => %dN', strcmp ( '헬로월드','안녕월드' ) );
열하나. 인쇄 ('strcmp( '안녕하십니까\0\0\0','안녕하십니까\0세계' ) => %dN', strcmp ( '안녕하십니까 0 0 0','안녕하십니까 0세계' ));
12.
13. 인쇄 ('N---------------N');
14.
열 다섯. 인쇄 ('strncmp( '헬로월드','헬로월드',5) => %dN', strncmp ( '헬로월드','헬로월드',5 ));
16. 인쇄 ('strncmp( '안녕하십니까','안녕하십니까\0세계',5) => %dN', strncmp ( '안녕하십니까','안녕하십니까 0세계',5 ));
17. 인쇄 ('strncmp( '안녕하십니까\0\0\0','안녕하십니까\0세계',8) => %dN', strncmp ( '안녕하십니까 0 0 0','안녕하십니까 0세계',8 ));
18. 인쇄 ('strncmp( '헬로월드','안녕하세요 세계',5) => %dN', strncmp ( '헬로월드','안녕월드',5 ));
19.
스물. 인쇄 ('N---------------N');
이십 일.
22. 인쇄 ('strcasecmp( '헬로월드','헬로월드' ) => %dN',strcasecmp( '헬로월드','헬로월드' ));
2. 3. 인쇄 ('strcasecmp( '안녕하십니까','안녕하십니까\0세계' ) => %dN',strcasecmp( '안녕하십니까','안녕하십니까 0세계' ));
24. 인쇄 ('strcasecmp( '헬로월드','안녕하세요 세계' ) => %dN',strcasecmp( '헬로월드','안녕월드' ));
25.
26. 인쇄 ('N---------------N');
27.
28. 인쇄 ('strncasecmp( '헬로월드','헬로월드',5) => %dN',strncasecmp( '헬로월드','헬로월드',5 ) );
29. 인쇄 ('strncasecmp( '안녕하십니까','안녕하십니까\0세계',5) => %dN',strncasecmp( '안녕하십니까','안녕하십니까 0세계',5 ));
30. 인쇄 ('strncasecmp( '안녕하십니까\0\0\0','안녕하십니까\0세계',8) => %dN',strncasecmp( '안녕하십니까 0 0 0','안녕하십니까 0세계',8 ));
31. 인쇄 ('strncasecmp( '헬로월드','안녕하세요 세계',5) => %dN',strncasecmp( '헬로월드','안녕월드',5 ));
32.
33. 인쇄 ('N---------------N');
3. 4.
35. 인쇄 ('memcmp( '헬로월드','헬로월드',5) => %dN', memcmp ( '헬로월드','헬로월드',5 ) );
36. 인쇄 ('memcmp( '안녕하십니까\0\0\0','안녕하십니까\0세계',8) => %dN', memcmp ( '안녕하십니까 0 0 0','안녕하십니까 0세계',8 ));
37. 인쇄 ('memcmp( '헬로월드','안녕하세요 세계',11) => %dN', memcmp ( '헬로월드','안녕월드',열하나 ));
38.
39.반품 0; 40.}

결론:

그래서 이 튜토리얼에서는 문자열을 다양한 방법으로 비교할 수 있는 방법을 살펴보았습니다. 우리가 보았듯이 stringCompare() 함수는 같지 않은 문자열에 대해 -1을 반환하지만 일치하지 않는 문자의 ASCII 값을 반환하도록 수정할 수 있습니다. 자신에게 가장 적합한 코드에서 사용할 수 있습니다.