c - C - 仅用一个指针递归交换 2 个字符
问题描述
我需要写一个函数:void swap (char * s1, char * s2);
该函数将替换字符串 1s 和 2s 的内容。约束:在函数中,没有在任何地方使用 [],而是通过使用指针来表现,此外,必须与选民进行旅行,这意味着他们实际上会根据需要移动到另一个单元格,并且不会留在一直在同一个位置。•函数中没有循环,即以递归方式工作。
我使用指向指针 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"
解决方案
好吧,这显然不是一个理想的解决方案,但可以为您提供一些工作。但是,这仅在您具有相同长度的字符串时才有效(如上所述)(或者是的,您必须分配内存+您需要知道字符串的长度)。但除此之外,我认为这可能会回答你的问题。
这适用于递归,并且取决于两个字符串的长度相同并且在每个字符串的末尾都包含一个零字符的事实。
#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;
}
推荐阅读
- angular - “返回时超出最大调用堆栈大小”与“void 类型不存在订阅”冲突
- report - XLSX 报告应显示在 Odoo10 的单张纸中
- python - 从它们用于 islice 时的产量与产量
- python - Python - 机器学习:从数组列表创建训练和测试集
- python - 不知道如何无限循环这个
- node.js - 是什么导致我的 POST 请求失败(使用 Express/Angular 的 CORS)?
- php - jquery php mysql - 当所有项目显示时如何隐藏加载更多按钮
- python - Python中的Flask-mysql fetchall问题
- java - 服务在 android 版本 Oreo 中停止并且应用程序崩溃
- java - BufferedReader 在每一行之后添加“,”。用空格替换逗号时遇到问题