字符串倒置函数

有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student."
要求: 不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
我的方法是这样的:
原字符串:student a am i
倒置一遍:tneduts a ma i
整体倒置:i am a student

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

void strs(char str[], int i){
	char* pc = str;
	char* pcc = str, *pccc = str;//三个指针,其中两个是用来倒置用的一个是用来作为船锚用;
	int j = i - 2;//后期会用到
	while (i){//先将整个字符串扫了一遍将每个需要置换的字母置换好
		if (*pcc != ' '&&*pcc != '/0'){
			*pcc++;//把指针指向空格或者/0这时候pcc和p之间的字符需要倒置
		}
		else {//倒置就行
			pccc = &(*pcc);//借用第三个指针来改变字符串这样pcc就不会重复遍历数组
			pccc -= 1;//开始pcc在‘ ’或者‘/0’向后走一位就到了单词上
			while (pc < pccc){
				*pc ^= *pccc;
				*pccc ^= *pc;
				*pc ^= *pccc;
				pc++; pccc--;//一个向前走,一个向后走

			}
			pcc += 1;//这时候最开始的船锚指针可以指向下一个字符了
			pc = &(*pcc);//两指针再次指向同一字符
		}

		i--;
	}
	//下面将整个字符串倒置就行
	pc = str;
	pcc = pc + j;
	while (pc < pcc){
		*pc ^= *pcc;
		*pcc ^= *pc;
		*pc ^= *pcc;
		pc++; pcc--;

	}

}







int main(){

	char str[] = { "student a am i" };
	char *p = str;
	int i = sizeof(str) / sizeof(str[0]); //计算字符串大小
	strs(p, i);
	printf("%s", p);//因为是指针所以经过倒置直接变换了原字符串的内容


	system("pause");
	return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值