В языке программирования C для свапа (обмена) значений двух строк можно использовать различные подходы. Рассмотрим несколько способов реализации.
1. Использование временной переменной:
#include <stdio.h> #include <string.h> void swapStrings(char **str1, char **str2) { char *temp = *str1; *str1 = *str2; *str2 = temp; } int main() { char *str1 = "Hello"; char *str2 = "World"; printf("Before swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); swapStrings(&str1, &str2); printf("After swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); return 0; }
В этом примере используется переменная temp для временного хранения адреса первой строки, затем адрес первой строки изменяется на адрес второй строки, а адрес второй строки изменяется на адрес, хранящийся в переменной temp. В результате строки меняются местами.
2. Использование указателей:
#include <stdio.h> #include <string.h> void swapStrings(char **str1, char **str2) { char *temp; temp = *str1; *str1 = *str2; *str2 = temp; } int main() { char *str1 = "Hello"; char *str2 = "World"; printf("Before swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); swapStrings(&str1, &str2); printf("After swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); return 0; }
В этом примере указатели **str1 и **str2 передаются в функцию swapStrings. После обмена значениями указателей адреса строк меняются местами.
3. Использование массивов символов:
#include <stdio.h> #include <stdlib.h> #include <string.h> void swapStrings(char *str1, char *str2) { int len1 = strlen(str1); int len2 = strlen(str2); char *temp = (char*)malloc((len1 + 1) * sizeof(char)); strcpy(temp, str1); strcpy(str1, str2); strcpy(str2, temp); free(temp); } int main() { char str1[] = "Hello"; char str2[] = "World"; printf("Before swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); swapStrings(str1, str2); printf("After swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); return 0; }
В этом примере использованы массивы символов для хранения строк. С помощью функции malloc() выделяется память под временную строку temp, затем используется функция strcpy() для копирования содержимого str1 в temp, str2 в str1, а содержимое temp в str2. И, наконец, освобождается выделенная память.
4. Использование операций XOR:
#include <stdio.h> #include <string.h> void swapStrings(char *str1, char *str2) { int len1 = strlen(str1); int len2 = strlen(str2); for (int i = 0; i < len1 && i < len2; i++) { str1[i] ^= str2[i]; str2[i] ^= str1[i]; str1[i] ^= str2[i]; } if (len1 < len2) { for (int i = len1; i < len2; i++) str1[i] = str2[i]; } else { for (int i = len2; i < len1; i++) str2[i] = str1[i]; } } int main() { char str1[] = "Hello"; char str2[] = "World"; printf("Before swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); swapStrings(str1, str2); printf("After swap:n"); printf("str1: %sn", str1); printf("str2: %sn", str2); return 0; }
В этом примере используется операция XOR (^) для обмена каждого символа между двумя строками. Если одна из строк длиннее другой, то копируются оставшиеся символы из более длинной строки.
Все описанные подходы являются рабочими и дают один и тот же результат – строки меняются местами. Выбор конкретного метода зависит от контекста и особенностей задачи, а также от предпочтений программиста.