字符串中单词的逆转
题目描述:将一个字符串中的单词进行逆转,请注意区分单词的逆转和字符串的逆转。‘
例:已知字符串为“I Love China!”,进行单词的逆转后为“China! Love I”。
思路:先对整个字符串进行逆转,之后再对每个单词进行逆转。
#include <iostream>
using namespace std;
void Reverse(char* a, char* b)
{
if (a == NULL || b == NULL)
return;
while (a < b)
{
char temp = *a;
*a = *b;
*b = temp;
a++, b--;
}
}
char* ReverseSentence(char* str)
{
if (str == NULL)
{
return NULL;
}
char* begin = str;
char* end = str;
while (*end != '\0')
{
end++;
}
end--;
Reverse(begin, end); //反转整个字符串
begin = end = str;
while (*begin != '\0')
{
if (*begin == ' ')
{
begin++;
end++;
continue;
}
//反转单词
else if (*end == ' ' || *end == '\0')
{
Reverse(begin, --end);
begin = ++end;
}
else
end++;
}
return str;
}
int main()
{
char s[100];
gets(s);
cout << ReverseSentence(s) << endl;
return 0;
}
此外,还有一种方法,即直接调用reverse()函数。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str;
getline(cin,str);
reverse(str.begin(), str.end()); //第一步,逆转整体,从begin开始到end前一个
int i = 0, begin = 0;
for (i = 0; i <= str.size(); i++) //如果第一个单词有很多个字母,那么如果不写<=的话会导致第一个单词在其内部被逆转,即如果第一个单词是She,而且还没有写<=,那么该单词就会以ehS的形式输出
{
if ((str[i] == ' ' || str[i] == '\0') && begin < i) //遇到空格或结束符,同时判断begin小于i,就是存在可逆转的单词
{
reverse(str.begin() + begin, str.begin() + i);
begin = i + 1;
}
}
cout << str << endl;
return 0;
}
还没有评论,来说两句吧...