1009. 说反话 (20)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

方法一:
程序说明:
  1.输入的字符串存储在数组str[]中,数组pos[]用来存储每个空格所在的位置,count用来存储单词个数,初始值为1;strlen()函数求出字符串的总长度
  2.知道每个空格所在的位置、字符串总长度和单词个数即可打印出相应的单词 C++ 代码如下:
 #include <bits/stdc++.h>
using namespace std; int main() {
char str[];
int pos[];
int count=,j=,i,len;
gets(str);
len=strlen(str);
for(i=;i<len;i++){
if(str[i]==' '){
count++;
pos[j]=i;
j++;
}
}
if(count==){
for(i=;i<len;i++){
cout<<str[i];
}
system("pause");
return ;
}
while(count!=){
for(i=pos[j-]+;i<len;i++)
cout<<str[i];
len=pos[j-];j--;count--;
if(count!=) cout<<' ';
}
for(i=;i<pos[];i++)
cout<<str[i];
system("pause");
return ;
}

C++ Code 1

方法二:使用strtok()函数
  strtok()函数说明:
    1.包含在 #include <string.h> 中
    2.函数原型:
char* strtok (char* str,constchar* delimiters );    
    3.函数功能:以传入的 delimiters为切割符对 str 分割成一个个子串,并返回指向被分割出片段的指针。当 str 中的字符查找到末尾时,返回NULL;
     如果查不到 delimiters 所标示的字符,则返回当前 strtok 的字符串的指针
    4.函数参数:
      str:在第一次被调用的时候 str 为被切割字符串的首地址,在后面调用的时候为NULL
      delimiters:将传入的字符当做切割符
C++ 代码如下:
 #include <bits/stdc++.h>
using namespace std; int main(){
char str[];
int flag=;
char* result;
const char *ch=" ";
vector<char *> word;
gets(str);
result=strtok(str,ch);
while(result!=NULL){
word.push_back(result);
result=strtok(NULL,ch);
}
for(int i=word.size()-;i>=;i--){
if(flag==){
cout<<word[i];
flag=;
}
else cout<<' '<<word[i];
}
system("pause");
}

C++ Code 2

05-08 15:09