c++ 字符串_C函数交换字符串

让我们考虑以下程序。

#include 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是geeks,str2是forgeeks。因此,上面的swap()函数不会交换字符串。该函数仅更改局部指针变量,而更改不会反映在函数外部。

c99b0fb71281df19d625ff8a7cb1b271.png

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

方法1(交换指针)
如果对字符串(不是数组)使用字符指针,则将str1和str2更改为指向彼此的数据。即交换指针。在函数中,如果要更改指针(显然,我们希望更改反映在函数外部),则需要将指针传递给指针。

#include 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 #include #include 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; } 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值