使用指针交换c中的字符串

时间:2012-11-04 16:27:47

标签: c string pointers char

需要帮助

这是我的代码

void swapstringfun()
{
   int i=0,j=0;
   char *str=(char *)malloc(sizeof(char)*15);
   char *mystr=(char *)malloc(sizeof(char)*15);
   system("cls");
   printf("Please enter first string :\t");
   scanf("%s",str);
   printf("Please enter second string :\t");
   scanf("%s",mystr);
   while(*(str+i)!='\0' && *(mystr+i)!='\0')
   {
     *(str+i) ^=*(mystr+i);
     *(mystr+i) ^=*(str+i);
     *(str+i) ^=*(mystr+i);
     i++;
   }
   printf("%s swapped to %s",str,mystr);
   getch();
   main();
}

我编写了上面的代码来使用XOR运算符交换字符串。这段代码的问题是。当我输入时,我们可以说.. RAJESH ASHISH 。然后,它显示输出 ASHISH RAJESH 。而且,这是预料之中的。

但是,输入时请说.. ABHISHEK CODER 。然后,输出 CODERHEK ABHIS 。但是,预期的输出是 CODER ABHISHEK 。任何人都帮我解决这个问题。我将不胜感激。

3 个答案:

答案 0 :(得分:2)

您迭代并交换,直到到达较短字符串的末尾

while(*(str+i)!='\0' && *(mystr+i)!='\0')

(或两者,如果长度相等)。要迭代直到到达较长字符串的末尾,您需要||而不是&& ,并确保1.两个指针指向足够大的内存块,以及2.较短的字符串以足够的0字节结尾。所以你应该calloc记忆,而不是malloc

但是,你应该交换指针,真的,

char *tmp = str;
str = mystr;
mystr = tmp;

答案 1 :(得分:1)

您还需要交换终止0,作为C中所谓的字符串的一部分。

0是字符数组中的限制元素,用于描述字符串。

答案 2 :(得分:0)

您需要对两个字符串的整个长度进行异或。由于在第二个示例中,字符串的长度不同,因此算法将不起作用。

这是你必须重新考虑的声明:

while(*(str+i)!='\0' && *(mystr+i)!='\0')