有一个字符数组的内容为:“student a am i”, 请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
————————————————————————————————————
对题目的解释:
不管是对整个字符串进行转换,还是对每一个单词进行转换,都需要用到转换函数,所以要写一个转换函数(具体实现在reverse函数里),首先实现整个字符串的逆置,只需把字符串的首尾地址传过去,就能对整个字符串进行逆置,而其后对每个单词进行逆置,最主要的是要找到每个单词的首尾地址,通过while循环来找到其地址(具体实现在String_reveverse函数中),最后利用reverse函数进行转换。
student a am i
先整个字符串转换后得到:i ma a tneduts
然后进行单词转换后得到:i am a student
#include<stdio.h>
#include<Windows.h>
void reverse(char *start,char *end)
{
char tmp = 0;
while (start < end)
{
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
}
void String_reveverse(char *arr,int len)
{
char *left = arr;
char *right = arr + len - 1;
char *cur = arr;
reverse(left, right);
while (*cur != '\0')
{
left = cur;
while (*cur != ' '&& *cur != '\0')
{
cur++;
}
reverse(left, cur - 1);
if (*cur == ' ')
{
cur++;
}
}
}
int main()
{
int i = 0;
char arr[] = "student a am i";
int len = sizeof(arr) / sizeof(arr[0])-1;//需要减去\0字符
String_reveverse(arr,len);
for (i = 0; i < len; i++)
{
printf("%c", arr[i]);
}
system("pause");
return 0;
}