2014-10-08 6 views
0
int stringXor(char *str1,char *str2) 
{ 
    int num1=0,num2=0; 
    for (int i = 0; i<strlen(str1); i++) 
    { 
     num1=str1[i]-'0'; 
     num2=str2[i]-'0'; 
     num1 = num1 | num2; 
     str1[i]=(char)num1; 
     //printf("%d",str1[i]); 
    } 

    int count=0; 
    for(int j=0;j<strlen(str1);j++) 
    { 
     if(str1[j]==1) 
      count++; 
    } 
    return count; 
} 

오류의 원인을 모르지만 문자열의 각 문자에 대해 or 작업이 성공하지 못합니다.C에서 바이너리 문자열 OR 연산이 잘못된 결과를 출력합니다.

+1

로 변경 str1에 선

if (str1[ i ] == '1' || str2[ i ] == '1') 

을 결과 논리합 문자열을 저장하려면 | '0'+ (NUM1 NUM2를); ' –

+0

명확히하십시오. 정확한 입력, 출력, 예상 출력은 무엇입니까? –

+0

@Lashane 난 str1과 str2 2 문자열을 계산하고 str1에 저장해야합니다. 아니, 작동하지 않습니다! – Teena

답변

1

문자열 중 하나에 1이 포함 된 위치의 개수를 반환하는 함수를 원한다면,이를 수행하는보다 단순한 함수를 작성하는 것이 좋습니다. 예를 들어 :

int CountOnes(char *str1, char *str2) 
{ 
    int count = 0; 
    int len = strlen(str1); // we assume that strlen(str1) == strlen(str2) 

    for (int i = 0; i < len; i++) 
    { 
     if (str1[ i ] == '1' || str2[ i ] == '1') 
      count++; 
    } 

    return count; 
} 

참고이 기능은 당신이 현재처럼 str1 변화의 부작용을 포함하지 않습니다.

난 당신이`NUM1 =한다고 가정

str1[ i ] = ((str1[ i ] - '0') | (str2[ i ] - '0')) + '0'; 
if (str1[ i ] == '1') 
    count++;