1. 程式人生 > >程式設計題:編寫一個程式碼,將“i am from shanghai”倒置為“shanghai from am i”

程式設計題:編寫一個程式碼,將“i am from shanghai”倒置為“shanghai from am i”

題目要求:編寫一個程式碼,將“i am from shanghai”倒置為“shanghai from am i”,即將句子中單詞的位置調換,

                   但不改變單詞內部的順序

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;


int main()
{
	int nn = 0;							//記錄str1陣列的下標
	int j = 0;							//記錄n陣列的下標
	int n[1024] = {0};					//存放原字串中空格字元與結束字元的下標
	char str[1024] = {0};				//存放輸入的字串
	char str1[1024] = {0};				//存放調換位置後的字串
	cout << "請輸入一串字元:";
	gets(str);
	//cout << str << endl;

	int len = strlen(str);
	//cout << len << endl;
	for(int i = 0;i <= len;i++)			//找出字串中空格與結束字元的位置並存放在陣列n中
	{
		if(str[i] == ' ' || str[i] == '\0')
		{
			n[j++] = i;
		}
	}
	//cout << n[2] << endl;
	for(int i = j-1;i >= 1;i--)			//兩個空格下標相減再減一可得空格間字串長度
	{
		for(int m = 0,k = (n[i]-n[i-1]-1);m < (n[i]-n[i-1]-1);m++,nn++,k--)		//迴圈將空格間字串放到str1中
		{
			str1[nn] = str[n[i]-k];
		}
		str1[nn++] = ' ';				//一個字串存放結束,就加上“ ”
	}
	for(int m = 0,k = n[0];m < n[0];m++,nn++,k--)	//第一個字串較特殊,長度等於第一個空格的下標
	{
		str1[nn] = str[n[0]-k];
	}
	//str1[nn++] = '\0';				
	strcpy(str,str1);
	cout <<"輸出結果為:" << str << endl;

    return 0;
}