C언어 strcmp 함수로 문자열 비교할 때 맨 처음으로 일치하는 값만 출력할 수 있나요?
문자 여러개를 배열로 입력받아서 예를 들어 a[0] = "a", a[1] = "b", a[2]="a", a[3]="a"이런식으로 값이 중복 되어있을 때 a를 가진 것들을 출력할 때 맨 처음으로 일치하는 값만 구할 수 는 없나요?
for(i = 0; i < 10; i++) {
strcmp((a[i], "a") == 0);
printf("%d\n", i);
}
이런 식으로 출력하면 출력 값이 0 2 3 이렇게 나오던데 저는 맨 처음으로 일치하는 0값만 출력받고 싶어요 일부러 \n도 썼는데 이어져서 출력되더라구요 이럴 때는 어떻게 해야하나요?
현재 질문상의 코드를 봤을 때는 "a"를 이외의 문자열일 경우에도 해당 인덱스 값 i가 출력됩니다.
이유는 문자열 비교를 해서 해당 결과를 가지고 사용하는 부분이 없기 때문입니다.
변경1: "a" 문자열일 경우에만 인덱스들을 출력하는 것으로 변경.
for (i = 0; i<10; i++) { if (strcmp(a[i], "a") == 0) { printf("%d\n", i); } }문제에서는 처음으로 일치하는 i 만 출력하는 것으로 바꾸어봅시다.
변경2: "a" 문자열일 경우에만 처음으로 등장하는 인덱스만을 출력
for (i = 0; i<10; i++) { if (strcmp(a[i], "a") == 0) { printf("%d\n", i); break; } }문자열이 아니라 각문자를 비교할때는 해당 배열이 \0(null termination)되어있다는 가정하에 strcmp가 아닌 strchr를 사용할수 있습니다.
strchr를 이용하여 리턴값이 null이 아니라면 문자를 찾은 것으로 판단하여 성공처리할수있습니다.
다만이함수는 array변수자체를 인자로 주는방법으로 가능하고요.
질문자님처럼 array index별로 조건식을 넣어 구현하려면 해당함수를이용하는게 아니라 그냥
if ( a[i] == 'a') 와 같이 문자를 비교하는식으로 가능합니다.
한번구현해보세요.