C-swap 2 символа рекурсивно только с одним указателем - PullRequest
0 голосов
/ 23 апреля 2019

Мне нужно написать функцию: void swap (char * s1, char * s2);

Функция заменит содержимое обеих строк 1 и 2. Ограничения: В функции нигде не используется [] , но при работе с указателями необходимо выполнять работу, кроме того, необходимо совершать поездки с избирателями, что означает, что они фактически переместятся в другую ячейку по мере необходимости, и не будет оставаться в одном и том же месте все время. • В функции нет циклов , то есть работа в рекурсии.

Я сделал функцию с указателем на указатель str **, но должен изменить ее на только один указатель str и рекурсивно . Как я могу это изменить?

#include <stdio.h>
#include <stdlib.h>

int main()
{
char *str1="abc",*str2="xyz",*pRev;
 swap(&str1, &str2); 
 printf("str1 is %s, str2 is %s", str1, str2); 
 getchar(); 
  return 0;
}
//need *str NOT **str
  void swap(char **str1, char **str2);
    char * RevWords (char * str, int size);
    void swap(char **str1, char **str2) 
    { 
      char *temp = *str1_ptr; 
      *str1_ptr = *str2_ptr; 
      *str2_ptr = temp; 
    }   

после метода обмена:

str2 = "abc", str1 = "xyz"

1 Ответ

0 голосов
/ 23 апреля 2019

Ну, это явно не идеальное решение, но дает вам кое-что для работы. Однако это будет работать (как упомянуто выше) только тогда, когда у вас одинаковая длина строк (или да, вам придется выделять память + вам нужно знать длину ваших строк). Но в противном случае я думаю, что это может ответить на ваш вопрос.

Это работает с рекурсией и зависит от того факта, что обе строки имеют одинаковую длину и содержат нулевой символ в конце каждой.

#include <stdio.h>
#include <stdlib.h>

void swap(char* str1, char* str2)
{
    // if both of them are zero characters then stop
    if (*str1 == '\0' && *str2 == '\0')
        return;
    // else swap the contents of the pointers
    else
    {
        char tmp = *str1;
        *str1 = *str2;
        *str2 = tmp;
        // advance both pointer and swap them too if thye are not '\0'
        swap(++str1, ++str2);        
    }
}

int main()
{
    char str1[] = "abc\0\0\0"; // padded with zeros to be the same length as str2
    char str2[] = "xyz123"; // the last '\0' is automatically added

    swap(str1, str2);
    printf("str1 is %s, str2 is %s", str1, str2);
    getchar();

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...