ビットごとの代入演算子のみを使用して 2 つの文字列の値を交換する関数 bitwise_swap の定義を記述します。
各文字を反復処理し、int に変更して、次を使用して交換しようとしました
a ^= b;
b ^= a;
a ^= b;
char int 値を取得したら、うまくいかなかったようです。
助けてくれてありがとう
ビットごとの代入演算子のみを使用して 2 つの文字列の値を交換する関数 bitwise_swap の定義を記述します。
各文字を反復処理し、int に変更して、次を使用して交換しようとしました
a ^= b;
b ^= a;
a ^= b;
char int 値を取得したら、うまくいかなかったようです。
助けてくれてありがとう
このようなことを試みたようですが、うまくいくはずです。
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];
}
}
#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