方法是先反转整个字符串,然后再反转字串。譬如先将“I am a student”反转为“tneduts a ma I”,然后再对每个字串(空格分割)反转一次。思想就那么简单吧。
第一种:
#include <stdio.h> void main() { char str[]="you are a student"; printf(str); printf("\n"); char *p,*q; char temp; p=q=str; while(*q!='\0') { q++; } q--; while(p<=q) { temp=*p; *p=*q; *q=temp; p++; q--; }//反转整个字符串 printf(str); printf("\n"); char *s; q=p=s=str;//指针指向开始位置 while(*q!='\0') { if(*q==' '||*(q+1)=='\0') { p--; if(*(q+1)=='\0')//处理最后一个字串 p++; while(s<=p) { temp=*p; *p=*s; *s=temp; s++; p--; }//反转局部字符串 s=q+1; p=q; } q++; p++; } printf(str); printf("\n"); }第二种:
#include <iostram> #include <stdio.h> int main(void) { int num=-12345,j=0,i=0,flag=0,begin,end; char str[]="I am a student",temp; j=strlen(str)-1; printf(" string=%s\n",str); //第一步是进行全盘反转,将单词变成“tneduts a ma I” while(j>i) { temp=str[i]; str[i]=str[j]; str[j]=temp; j--; i++; } printf(" string=%s\n",str); int i=0; //第二步进行部分反转,如果不是空格则开始反转单词 while(str[i]) { if(str[i]!=' ') { begin=i; while(str[i]&&str[i]!=' ') { i++; } i=i-1; end=i; } while(end>begin) { temp=str[begin]; str[begin]=str[end]; str[end]=temp; end--; begin++; } i++; } printf(" string=%s\n",str); return 0; }第三种:
void
ReverseWord(
char
*
p,
char
*
q)
{
while
(p
< q)
{
char
t
= *p ;
*p++
= *q ;
*q--
= t ;
}
}
char
*
ReverseSentence(
char
*s)
{
char
*p
= s ;
//
point to the first char of a word
char
*q
= s ;
//
point to a white space or '\0'
while
(*q
!=
'\0'
)
{
if
(*q
==
'
'
)
{
ReverseWord(p,
q - 1) ;
q++
;
//
move to next word
p
= q ;
}
else
q++
;
}
ReverseWord(p,
q - 1) ;
//
Reverse the last word
ReverseWord(s,
q - 1) ;
//
Reverse the whole sentence
return
s
;
}