编写程序以字符串为单位,以空格或标点符号(字符串中仅含英文逗号','或小数点'.'作为标点符号)作为分隔符,对字符串中所有单词进行倒排,然后把已处理的字符串(应不含标点符号)打印出来。 输入格式:输入一个字符串(包含大小写字母、空格、逗号或小数点)
时间: 2024-03-14 08:46:06 浏览: 143
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
好的,这是一个比较有挑战性的编程题目,需要一些字符串的操作和逻辑实现。以下是一个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`函数反转单词。最后,我们再次遍历字符串,将所有单词逐个输出,忽略分隔符即可。
希望这个代码示例能够帮到您!
阅读全文