C函数交换字符串

让我们考虑下面的程序。

null

#include<stdio.h>
void swap( char *str1, char *str2)
{
char *temp = str1;
str1 = str2;
str2 = temp;
}
int main()
{
char *str1 = "geeks" ;
char *str2 = "forgeeks" ;
swap(str1, str2);
printf ( "str1 is %s, str2 is %s" , str1, str2);
getchar ();
return 0;
}


程序的输出是 str1是极客,str2是伪造者 .所以上面的swap()函数不交换字符串。函数只更改本地指针变量,而这些更改不会反映在函数外部。

让我们看看交换字符串的正确方法:

方法1(交换指针) 如果你是 对字符串使用字符指针 (不是数组)然后更改str1和str2以指向彼此的数据。i、 例如,交换指针。在一个函数中,如果我们想要改变一个指针(显然,我们想要改变在函数之外被反映出来),那么我们需要传递一个指向指针的指针。

#include<stdio.h>
/* Swaps strings by swapping pointers */
void swap1( char **str1_ptr, char **str2_ptr)
{
char *temp = *str1_ptr;
*str1_ptr = *str2_ptr;
*str2_ptr = temp;
}
int main()
{
char *str1 = "geeks" ;
char *str2 = "forgeeks" ;
swap1(&str1, &str2);
printf ( "str1 is %s, str2 is %s" , str1, str2);
getchar ();
return 0;
}


如果使用字符数组存储字符串,则无法应用此方法。

方法2(交换数据) 如果你是 使用字符数组存储字符串 然后,首选的方法是交换两个数组的数据。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/* Swaps strings by swapping data*/
void swap2( char *str1, char *str2)
{
char *temp = ( char *) malloc (( strlen (str1) + 1) * sizeof ( char ));
strcpy (temp, str1);
strcpy (str1, str2);
strcpy (str2, temp);
free (temp);
}
int main()
{
char str1[10] = "geeks" ;
char str2[10] = "forgeeks" ;
swap2(str1, str2);
printf ( "str1 is %s, str2 is %s" , str1, str2);
getchar ();
return 0;
}


此方法不能应用于存储在只读内存块中的字符串。

如果您发现上述文章中有任何不正确之处,或者您想分享有关上述主题的更多信息,请发表评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享