天天看點

C++實作一句英文句子中的單詞逆置

比如,輸入I am a student.

輸出 student. a am I

思路:

1. 先将這個字元串整體倒置,

2. 再将單個單詞倒置.

#include <iostream>
using namespace std;

int len(char* str);
char* reverseWord(char* str ,int i,int j);
char *strReverse(char *str);

int main(int argc, const char * argv[])
{
    char str[]="I come from China.";
    int length=len(str);
    strReverse(str);
    for (int i=0; i<length;i++)
    {
        cout <<str[i];
    }
    cout<<endl;
    return 0;
}

int len(char* str) {//計算字元串的長度
    int length = 0;
    for(int i = 0; str[i] != '\0'; i++) {
        length++;
    }
    return length;
}
char* reverseWord(char* str ,int i,int j) {//根據i,j的位置反轉單詞
    char temp;
    while(i < j) {
        temp = str[i]; str[i] = str[j]; str[j] = temp;
        i++; j--;
    }
    return str;
}
char *strReverse(char *str)
{//字元串反轉,用到了上面的函數
    int length=len(str);
    char *newStr=reverseWord(str,0,(length-1));
    // 先翻轉整個句子
    for (int i=0; i<length; i++) {
        int len=0;
        // 翻轉所有單詞,以空格為界
        while(newStr[i] != ' ' && newStr[i] !='\0') {
            len++;
            i++;
        }
        int k = i-len,j=i-1;
        reverseWord(newStr,k,j);
    }
 
    return str;
}