需要帮助
这是我的代码
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 。任何人都帮我解决这个问题。我将不胜感激。
答案 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')