c语言中单词翻转案例!
输入:
i like china
输出:
china like i
这里我们可以设计成用户输入方式,因为偷懒所以就没有写输入的代码了,直接声明一个数组
大小根据字符串的长度来确定,包含结束符
char arr [] = "i like chine"
整理思路,先将全部字符串进行翻转,在将局部单词进行翻转
然后根据空格来区分单词的结束
写一个翻转的函数,进行字符串翻转,需传入开始地址和结束地址,使用三水桶方式进行字符串翻转。
这里因为没有给数组设置大小,他的大小是根据字符串的长度来决定,如若指针超出就会报非法使用,所以我们会和其他实现稍稍有一些不同
#include <stdio.h>
//字符串翻转函数,不需要返回值,因为操作的是具体地址
void revers_all_word(char* left, char* right) {
//这里这样写是因为在数组中,栈内存开辟的是连续的一块空间,所以比对指针是有意义的
//这里使用后置自增自减刚好符合场景
while (left < right) {
char temp = *left;
*left++ = *right;
*right-- = temp;
}
}
//第二步实现查找单词
void word_revers(char* str) {
/*正如前面所说,没有指定大小,
后面的空间是野指针不可以使用,所以我们拿长度进行判断是否需要自增跳过空格或者结束符*/
int len = strlen(str);
char* left = str;
char* right = str;
while (*right) {
while (*right) {
if (*right != ' ' && *right != '\0') {
right++;
}
else {
break;
}
}
revers_all_word(left, right - 1);
if (right - str < len) {
left = ++right;
}
}
}
//程序main函数入口
int main() {
char arr[] = "i like china";
char* left = arr;
char* right = arr + (strlen(arr)-1);
printf("%s \n", arr);//翻转前
revers_all_word(left, right);
word_revers(arr);
printf("%s \n", arr);
return 0;
}