给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
输入样例:Hello World Here I Come输出样例:
Come I Here World Hello
此题主要考察整行输入字符串及字符串子串分割
C++ string substr()
std::string::substr
string substr (size_t pos = 0, size_t len = npos) const;
子串是,在字符位置pos开始,跨越len个字符(或直到字符串的结尾,以先到者为准)对象的部分。
参数
-
pos
-
第一个字符的位置被复制为子串。
如果这是等于字符串的长度,该函数返回一个空字符串。
如果这是大于字符串的长度,它会抛出out_of_range。
注意:第一个字符表示为值0(不是1)。
len
-
字符数在子包括(如果字符串是短,尽可能多的字符可以在需要使用)。
字符串::非营利值表示的所有字符,直到字符串的结尾。
size_t is an unsigned integral type (the same as member type string::size_type ).
返回值
A string object with a substring of this object.代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int i,length,count=0,start=0;
string input;
string tmp[40];
getline(cin,input);
length = input.length();
//string a = input.substr(0, 3);
int len;
for (i = 0; i <length+1; i++)
{
if (input[i] == ' ' || i == length){
len = i - start;
tmp[count] = input.substr(start, len);
start = i+1;
count++;
}
}
for (i = count-1; i > 0; i--)
{
cout << tmp[i] << " ";
}
cout << tmp[i] ;
return 0;
}
注:
使用getline(cin,string)时,长度为字符串长度,但是字符串长度加一仍有内容,输出看了一下,是'a'