-4

ビットごとの代入演算子のみを使用して 2 つの文字列の値を交換する関数 bitwise_swap の定義を記述します。

各文字を反復処理し、int に変更して、次を使用して交換しようとしました

a ^= b;
b ^= a;
a ^= b;

char int 値を取得したら、うまくいかなかったようです。

助けてくれてありがとう

4

2 に答える 2

4

このようなことを試みたようですが、うまくいくはずです。

void bitwise_swap(char * restrict lhs, char * restrict rhs, size_t length) {
    size_t i;
    for (i=0; i<length; ++i) {
        lhs[i] ^= rhs[i];
        rhs[i] ^= lhs[i];
        lhs[i] ^= rhs[i];
    }
}
于 2013-06-28T08:58:49.873 に答える
1
#include <stdio.h>
#include <string.h>
//#include <stdbool.h>

    int main()
    {  int m,n,t,i;
        char a[]="National University";
        char b[]="India";
        char c[100];
        char d[100];

        m=strlen(a);
        n= strlen(b);


        if(m>n)
        {   t=m;
         //   strcpy(&c,&a);
            for(i=0;i<n;i++)
              d[i]=b[i];
            for(i=0;i<m-n;i++)
                d[n+i]=32;
            for(i=0;i<t;i++)
                   {
                    a[i]=a[i]^d[i];
                    d[i]=d[i]^a[i];
                    a[i]=a[i]^d[i];
                   }

            printf("a= %s \t b=%s" ,a,d);
        }
        else
        {   t=n;
       // strcpy(&d,&b);
           for(i=0;i<m;i++)
               c[i]=a[i];
           for(i=0;i<n-m;i++)
            c[m+i]=32;
           for(i=0;i<t;i++)
                {
                                c[i]=c[i]^b[i];
                                b[i]=b[i]^c[i];
                                c[i]=c[i]^b[i];
                            }

           printf("c= %s \t d=%s" ,c,b);
        }



    return 0;
    }

このようにできます。必要なのは、各文字を交換するためのループだけです。編集:今は動的です。長さを手動で指定する必要はありません。短い文字列の最後に NULL 文字を追加しています。結果をご覧ください: http://ideone.com/B7lsz4

于 2013-06-28T09:00:37.380 に答える