Рубрики

Функция C для замены строк

Давайте рассмотрим программу ниже.

#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, чтобы они указывали на данные друг друга. т.е. поменять местами указатели В функции, если мы хотим изменить указатель (и, очевидно, мы хотим, чтобы изменения отображались вне функции), нам нужно передать указатель на указатель.

#include<stdio.h>

  

/ * Меняет местами строки, меняя указатели * / 

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>

   
/ * Меняет строки, меняя данные * /

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 для замены строк

0.00 (0%) 0 votes