有一个字符数组的内容为:”student a am i”, 请你将数组的内容改为”i am a student”.
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)
#include<stdio.h>
#include<stdlib.h>
int length(char *arr)
{
int i = 0;
while (arr[i] != '\0')
{
i++;
}
return i;
}
void swap(char *a, char *p)
{
char tem;
while (a < p)
{
tem = *a;
*a = *p;
*p = tem;
a++;
p--;
}
}
int main()
{
char arr[] = "students a am i";
char *p = arr;
char *q = arr;
int flag = 0;
for (int i = 0; arr[i] != '\0'; i++)
{
if ((flag == 0) && (arr[i] != ' '))
{
p = arr + i;
flag = 1;
}
else if ((flag == 1) && (arr[i] == ' '))
{
q = arr + i - 1;
flag = 0;
swap(p,q);
}
}
swap(arr, arr + length(arr) - 1);
printf("%s", arr);
system("pause");
return 0;
}
编程思路:设定一个标记,当从空格到单词(也就代表是一个新单词的开始)时,标记为0,让指针p指向此处,当从单词到空格(也就是一个单词结束)时,标记为1,让指针q指向单词的最后一个字母,将这个单词进行swap()交换。一直重复知道字符串结束,最后再将整体swap()交换。