模拟实现一个字符串的反转

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>            //断言的库函数文件,用以执行时抛出异常
#include <windows.h>


void my_reverse(char *left,char *right) //定义具有逆置字符功能的函数
{
char tmp=NULL;
assert(left);      //断言,以保证传进的两个指针类型的参数是否不为空(有效)
assert(right);
while (left < right)
{
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int my_strlen(char *str)     //定义求取字符串长度的函数,返回count指向int型的具体值
{
assert(str);


int count = 0;
while (*str++)
{
count++;
}
return count;
}
void reverse_str(char arr[])    //定义逆置字符串的函数
{
char *start = arr;
char *end = arr + my_strlen(arr) - 1;  //此处的字符串长度就可以调用my_strlen
char *curr=NULL;
if ((arr == NULL) || (arr[0] == '\0')) //如果指针为空或者首元素为字符串结束符
{
return;            //字符串为空,直接结束程序
}
my_reverse(start,end);
while (*arr)              //不为NULL,‘\0’的情况
{
curr = arr;
while ((*arr != '\0') && (*arr != ' ')) //元素不为\0和空白符,说明一个单词还未读取完毕
{
arr++;
}
end = arr - 1;        //如果为空白符arr-1说明退至此单词末尾字母处,如果为‘\0' arr-1说明退至字符串结束位置处的前一位
my_reverse(curr,end);
if (*arr == ' ')        //指针指向的内容为空白符时,指针移动到下一单词的首字母处,去除了指向结束符时指针仍旧移动而越界的弊端
{
arr++;
}
}
}
int main()
{
char arr[] = "student a am I";
reverse_str(arr);
printf("%s\n", arr);
system("pause");
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值