有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)

首先将整个字符串颠倒过来 也就是将数组逆序存储,【写代码时我把定义的临时变量mid定义成arr[mid],并且还将mid 初始化为0,导致后来一直出错,不可以定义下标,因为下标都是有left和right来控制的】

其次再将每个单词颠倒,这里我出现的问题比较多,开始我是苦恼于应该用if语句还是while语句判断条件,但是之后是需要不断调整left和right并且再次交换字符的,所以这里用while语句更恰当,之后便是right的自增问题,一开始我是直接单独用right++来控制,但是right不能一直增加,要在Len范围内,所以就考虑到该使用for循环来控制。

判断arr[left]和arr[right]进行交换的条件我设定为只要arr[right] 为空格,就退一和left的值进行交换,但是这里有个问题,到字符串最后一个单词的时候,后面是没有空格的,所以条件要或上一个判断是否是反斜杠0【\0】,或运算前者是真便不判断后一个条件,反之,前者若为假,则要进行后一条件的判断。

结果是:i am a student

void re_string(char *arr,int len)

{

int left = 0;
int right = len - 1;
while(left <= right)
{
char mid;
mid = arr[right];
arr[right] = arr[left];
arr[left] = mid;
right--;
left++;
}
}
void re_word(char *arr,int len)
{
int left = 0;
int right = 0;
for (right = 0; right <= len; right++)
{


if(arr[right] == ' '||arr[right] == '\0')
{
int r = right-1;
int l = left;
while (l <= r)
{
char mid;
mid = arr[r];
arr[r] = arr[l];
arr[l] = mid;
r--;
l++;
}
left = right + 1;
}


}
}
int main()
{
char arr[50] = "student a am i";//i ma a tneduts
int len = strlen(arr);
re_string(arr,len);
re_word(arr,len);
printf("%s\n", arr);
system("pause");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值