📜  C函数交换字符串

📅  最后修改于: 2021-05-20 07:16:38             🧑  作者: Mango

让我们考虑以下程序。

#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()函数不会交换字符串。该函数仅更改局部指针变量,而更改不会反映在函数外部。

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

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

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

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

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。