思路
我们首先把字符串整个反转,然后在逐个单词反转回来,每个单词通过空格' '分隔开
代码实现
int strReverse(char * head, char * tail){
if(NULL == head || NULL == tail){
printf("strReverse param error!\n");
return PARAM_ERR;
}
char tmp;
while(head < tail){
tmp = *head;
*head = *tail;
*tail = tmp;
head++;
tail--;
}
return SUCCESS;
}
int strReversWithoutWord (char * str){
if(NULL == str){
printf("strReverse param error!\n");
return PARAM_ERR;
}
int len = 0;
char * head = NULL, * tail = NULL;
char * p = NULL, * q = NULL;
/*1. 整个字符串颠倒*/
len = strlen(str);
head = str;
tail = str + len - 1;
strReverse(head, tail);
/*逐个单词颠倒回来*/
p = str;
while(*p != '\0'){
head = p;
q = p;
while(' ' != *q && '\0' != *q){
q++;
}
tail = q - 1;
strReverse(head, tail);
p = q + 1;
}
}
void testReverse(void){
char str[100] = "Feng is from Beijing!";
char * head = NULL, * tail = NULL;
int len = 0;
printf("\n************ testReverse ************ \n");
strReversWithoutWord(str);
printf("Reverse string without word is : %s\n\n", str);
return;
}
代码编译
gcc main.c str.c -g -o a.exe
调试输出
************ testReverse ************
Reverse string without word is : Beijing! from is Feng