有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
student a am i
第一步:创建逆置函数将整个字符串逆置 i ma a tneduts
第二步:切分字符串,将空格改为’\0’ i\0ma\0a\0tneduts
第三步:还原空格 i ma a tneduts
第四步:再次调用逆置函数将单个单词逆置得到结果 i am a student
//student am i 将其变为
//i am student
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//字符串逆置函数
void reverse_string(char* p) {
char* start = p;
char* end = p;
char temp = 0;
while (*end != '\0') {
end++;
}
end--;
while (start < end){
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
//单词逆置函数
void reverse_word(char* p1) {
int length = strlen(p1);
char* start = p1;
char* end = p1;
//空格换位'\0'
for (int j = 0; j <length; j++) {
if (p1[j] == ' ') {
p1[j] = '\0';
}
}
//逆置单个单词
for (int i = 0; i <= length+1; i++) {
//遇到'\0'就调用逆置函数
if (end[i] == '\0') {
reverse_string(start);
//start指向'\0'的下一个字符
start = p1 + i + 1;
}
}
//将'\0'还原为' '(空格)
for (int k = 0; k <length; k++) {
if (p1[k] == '\0') {
p1[k] = ' ';
}
}
}
int main(){
char a[] = "student am i";
printf("逆置前:%s\n", a);
reverse_string(a);
reverse_word(a);
printf("逆置后:%s\n",a);
system("pause");
return 0;
}