思绪:
- 将数组内每个单词内的字符分别反转
- 将数组内的字符整体反转
- 打印数组
解法一:
不使用库函数
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//反转数组str[]内的字符
void reverse_part(char* str, int start, int end){
int i, j, tmp;
for (i = start, j = end; i < j; i++, j--){
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
int main(){
char src[] = "student a am I";
int i;
int start = 0, end;
for (i = 0; src[i]; i++){
if (src[i] == ' '){ //以' ' 为分界线,将每个单词分开
end = i - 1;
reverse_part(src, start, end);
start = i + 1;
}
}
reverse_part(src, start, i - 1);//用来反转最后一个单词
reverse_part(src, 0, i - 1); //将src数组整体反转,除了src[i] == ‘\0’。
puts(src); //打印字符数组
system("pause");
return 0;
}
代码生成图:
解法二:
完全使用库函数
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse(char* src){
char* p;
char tmp[256] = { 0 };
//在 src数组中查找 ' '最后一次出现的位置
while (p = strrchr(src, ' ')){
strcat(tmp, p + 1); //p+1 是将' '后的一段字符串拼接到tmp中
strcat(tmp, " "); //给tmp数组再补一个‘ ’
*p = 0; //将的 ' '的位置设置为'\0'
}
strcat(tmp, src);//此时已没空格,将src数组中剩下的字符串拼接到tmp中
strcpy(src, tmp);//将tmp数组覆盖回src数组中
}
int main(){
char src[] = "student a am I";
reverse(src); //反转数组src[]
puts(src); //打印字符数组
system("pause");
return 0;
}
代码生成图: