编写程序以字符串为单位,以空格或标点符号(字符串中仅含','或'.'作为标点符号)作为分隔符,对字符串中所有单词进行倒排,之后把已处理的字符串(应不含标点符号)打印出来。
时间: 2023-04-26 20:00:07 浏览: 335
示例代码:
```python
s = "我是一个字符串, 它包含标点符号。"
import re
# 使用正则表达式将标点符号替换为空格
s = re.sub('[,.。]', ' ', s)
# 以空格为分隔符将字符串分割为单词
words = s.split()
# 倒排单词
words = words[::-1]
# 打印已处理的字符串
print(' '.join(words))
```
输出: "字符串 一个 是 我"
相关问题
编写程序以字符串为单位,以空格或标点符号(字符串中仅含英文逗号','或小数点'.'作为标点符号)作为分隔符,对字符串中所有单词进行倒排,然后把已处理的字符串(应不含标点符号)打印出来。 输入格式:输入一个字符串(包含大小写字母、空格、逗号或小数点)
好的,这是一个比较有挑战性的编程题目,需要一些字符串的操作和逻辑实现。以下是一个C语言的代码示例,实现了此题的功能:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN 100 // 定义字符串最大长度
void reverse(char *s, int start, int end) // 反转单词
{
while(start < end)
{
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
void reverseWords(char *s)
{
int len = strlen(s);
reverse(s, 0, len - 1);
int start = 0;
for(int i = 0; i < len; i++)
{
if(s[i] == ' ' || s[i] == ',' || s[i] == '.') // 判断是否为分隔符
{
reverse(s, start, i - 1); // 反转单词
start = i + 1;
}
}
reverse(s, start, len - 1); // 反转最后一个单词
}
int main()
{
char str[MAX_LEN];
fgets(str, MAX_LEN, stdin); // 从标准输入读取字符串
int len = strlen(str);
if(str[len - 1] == '\n') // 处理fgets读取的换行符
{
str[len - 1] = '\0';
len--;
}
reverseWords(str); // 反转单词
int i = 0;
while(i < len)
{
if(isalpha(str[i])) // 如果是字母,则输出该单词
{
putchar(str[i]);
i++;
while(i < len && isalpha(str[i]))
{
putchar(str[i]);
i++;
}
putchar(' ');
}
else // 如果是标点符号或空格,则继续向后遍历
{
i++;
}
}
putchar('\n'); // 输出完毕,换行
return 0;
}
```
这个程序首先通过`fgets`函数从标准输入读取一个字符串,然后调用`reverseWords`函数对字符串中的单词进行反转。`reverseWords`函数中,我们先将整个字符串反转,然后再遍历一遍字符串,根据空格、逗号或小数点等分隔符来找到单词的起始和结束位置,然后调用`reverse`函数反转单词。最后,我们再次遍历字符串,将所有单词逐个输出,忽略分隔符即可。
希望这个代码示例能够帮到您!
用c++ 编写程序以字符串为单位,以空格或标点符号(字符串中仅含英文逗号','或小数点'.'作为标点符号)作为分隔符,对字符串中所有单词进行倒排,然后把已处理的字符串(应不含标点符号)打印出来。 输入格式:输入一个字符串(包含大小写字母、空格、逗号或小数点)
好的,以下是一个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`函数反转单词。最后,我们再次遍历字符串,将所有单词逐个输出,忽略分隔符即可。
希望这个代码示例能够帮到您!
阅读全文