用c++ 编写程序以字符串为单位,以空格或标点符号(字符串中仅含英文逗号','或小数点'.'作为标点符号)作为分隔符,对字符串中所有单词进行倒排,然后把已处理的字符串(应不含标点符号)打印出来。 输入格式:输入一个字符串(包含大小写字母、空格、逗号或小数点)
时间: 2024-03-14 16:46:11 浏览: 144
好的,以下是一个C++的代码示例,实现了此题的功能:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isSeparator(char c) // 判断字符是否为分隔符
{
return c == ' ' || c == ',' || c == '.';
}
void reverse(string &s, int start, int end) // 反转单词
{
while(start < end)
{
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
void reverseWords(string &s)
{
reverse(s.begin(), s.end()); // 先整体反转字符串
int start = 0;
int len = s.length();
for(int i = 0; i < len; i++)
{
if(isSeparator(s[i])) // 判断是否为分隔符
{
reverse(s, start, i - 1); // 反转单词
start = i + 1;
}
}
reverse(s, start, len - 1); // 反转最后一个单词
}
int main()
{
string str;
getline(cin, str); // 从标准输入读取整行字符串
reverseWords(str); // 反转单词
int i = 0;
while(i < str.length())
{
if(isalpha(str[i])) // 如果是字母,则输出该单词
{
cout << str[i];
i++;
while(i < str.length() && isalpha(str[i]))
{
cout << str[i];
i++;
}
cout << ' ';
}
else // 如果是标点符号或空格,则继续向后遍历
{
i++;
}
}
cout << endl; // 输出完毕,换行
return 0;
}
```
这个程序和C语言的示例比较类似,但是使用了C++的STL库中的`string`类型,以及更方便的输入输出方式。首先,我们使用`getline`函数从标准输入读取一行字符串,然后调用`reverseWords`函数对其中的单词进行反转。`reverseWords`函数中,我们先将整个字符串反转,然后再遍历一遍字符串,根据空格、逗号或小数点等分隔符来找到单词的起始和结束位置,然后调用`reverse`函数反转单词。最后,我们再次遍历字符串,将所有单词逐个输出,忽略分隔符即可。
希望这个代码示例能够帮到您!
阅读全文