[cpp]
<p>題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。
為簡單起見,標點符號和普通字母一樣處理。
例如輸入“I am a student.”,則輸出“student. a am I”。</p><p>處理方法是首先將整個句子翻轉,然後再將其中的每個單詞翻轉。</p><p>代碼如下:</p><p> </p>
[cpp]
#include <iostream>
using namespace std;
void myReverse(char*, char*);
char * senReverse(char*);
int main()
{
char sen[]="hello, I am a student!";
char *result=senReverse(sen);
cout << result << endl;
return 0;
}
void myReverse(char *start, char *end)
{
char temp;
while(start<end)
{
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
}
char * senReverse(char *sen)
{
char *start=sen, *end=sen+strlen(sen)-1;
myReverse(start, end); //先反轉整個句子
[cpp]
釋部分是另外一種實現,只不過看起來有些繁瑣
int loc; //記錄每個單詞的長度
for(start=sen,end=start;(*end)!='\0';start+=loc)
{
loc=0;
while((*end)!=' '&&(*end)!='\0'){end++, loc++;}
end--;
myReverse(start, end);
end+=2;
loc++;
}
*/
end=start;
while(*start!='\0')
{
if(*end==' '||*end=='\0')
{
myReverse(start, --end);
if(*end=='\0')
break;
end+=2;
start=end;
}
else
++end;
}
return sen;