有一个字符数组的内容为:“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;
}
最后
以上就是野性星星最近收集整理的关于字符串倒置函数的全部内容,更多相关字符串倒置函数内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复