使用按位运算交换字符串

时间:2013-06-28 08:46:17

标签: c bit-manipulation

  

写一个只使用bit的函数bitwise_swap的定义   明智的赋值运算符交换两个字符串的值。

我尝试迭代每个char,转换为int并交换 使用

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

一旦我获得了char int值,但它似乎没有用。

提前感谢您的帮助

2 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分: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