source

C에서 두 문자열을 비교하는 것?

manysource 2023. 10. 17. 20:23

C에서 두 문자열을 비교하는 것?

비교가 안되고 있어서 코드가 작동하지 않습니다. 왜죠?

모든 이름들이 지난다.if.

printf("Enter Product: \n");
scanf("%s", &nameIt2);
printf("Enter Description: \n");
scanf("%s", &descriptionI);
printf("Enter Quantity: \n");
scanf("%d", &qtyI);
printf("Enter Order Quantity: \n");
scanf("%s", &ordqtyI);

while (fscanf(fp4, "%s %s %d %s\n", &namet2, &description2, &qty2, &ordqty2) != EOF){
    if(namet2 != nameIt2)
        fprintf(fpt2, "%s %s %d %s\n", &namet2, &description2, qty2, &ordqty2);
}

두 개의 C 문자열을 비교하는 방법(char *), 을 사용합니다.함수가 반환됩니다.0문자열이 동일한 경우 코드에서 이를 사용해야 합니다.

if (strcmp(namet2, nameIt2) != 0)

사용하시는 경우

if (namet2 != nameIt2)

두 문자열의 포인터(addresses)를 비교하는 것입니다. 두 개의 다른 포인터가 있을 때는 동일하지 않습니다(사용자 상황에서는 항상 해당됨).

두 문자열을 비교하려면 내장 함수를 사용합니다.strcmp()헤더 파일 사용string.h

if(strcmp(a,b)==0)
    printf("Entered strings are equal");
else
    printf("Entered strings are not equal");

또는 다음과 같이 자신의 함수를 작성할 수 있습니다.

int string_compare(char str1[], char str2[])
{
    int ctr=0;

    while(str1[ctr]==str2[ctr])
    {
        if(str1[ctr]=='\0'||str2[ctr]=='\0')
            break;
        ctr++;
    }
    if(str1[ctr]=='\0' && str2[ctr]=='\0')
        return 0;
    else
        return -1;
}

현재 두 문자열의 주소를 비교하고 있습니다.

strcmp를 사용하여 두 문자 배열의 값을 비교합니다.

 if (strcmp(namet2, nameIt2) != 0)

여기서 포인터를 비교하려고 하는 것이지, 가리키는 내용(즉, 당신의 문자)을 비교하려고 하는 것은 아닙니다.

둘 중 하나를 사용해야 합니다.memcmp아니면str{,n}cmp내용을 비교하기 위해서 입니다.

사용하셔야 합니다.strcmp:

strcmp(namet2, nameIt2)

배열의 이름은 시작 주소를 나타냅니다.둘다 시작주소namet2그리고.nameIt2다릅니다.따라서 ()와 같음==) 오퍼레이터는 주소가 동일한지 여부를 확인합니다.두 문자열을 비교할 때 더 좋은 방법은strcmp(), 혹은 루프를 이용하여 캐릭터별로 비교할 수 있습니다.

질문의 Why에 대한 답변:

등식 연산자는 다음과 같은 단순 변수 유형에만 적용할 수 있기 때문입니다.floats,ints, 또는chars, 구조나 배열과 같은 더 정교한 유형은 아닙니다.두 문자열이 동일한지 확인하려면 두 문자열을 문자별로 명시적으로 비교해야 합니다.

if(strcmp(sr1,str2)) // this returns 0 if strings r equal 
    flag=0;
else flag=1; // then last check the variable flag value and print the message 

                         OR

char str1[20],str2[20];
printf("enter first str > ");
gets(str1);
printf("enter second str > ");
gets(str2);

for(int i=0;str1[i]!='\0';i++)
{
    if(str[i]==str2[i])
         flag=0;
    else {flag=1; break;}
}

 //check the value of flag if it is 0 then strings r equal simple :)

언급URL : https://stackoverflow.com/questions/14232990/comparing-two-strings-in-c