1 条题解
-
0
该问题通过遍历输入字符串,逐步构建结果字符串 s3,并使用辅助集合 s2 记录已出现的非元音字母。可能前面的单词全为元音,那么空格需要消掉。 如果单词整体被消掉,那么同样空格也不能有 字符筛选:跳过所有元音字母(A, E, I, O, U)。 去重处理: 使用 s2 存储已出现的非元音字母。 若当前字符未在 s2 中出现,则处理并加入结果字符串 s3。 特殊字符处理: 空格:若 s3 为空或前一个字符非空格,则添加。 标点符号(逗号、句号、问号):若 s3 的最后一个字符是空格,则替换该空格;否则直接添加。 末尾清理:移除结果字符串 s3 末尾的所有空格。
#include <iostream> #include <cstdio> #include <string> using namespace std; int main() { string s1,s2,s3; int num,i; getline(cin,s1); num=s1.size(); for (i=0;i<num;i++) { if(s1[i]!='A'&&s1[i]!='E'&&s1[i]!='I'&&s1[i]!='O'&&s1[i]!='U') { if (s2.find(s1[i])==string::npos) { if (s3.empty()) { if (s1[i]==' ') continue; else s3+=s1[i]; } else { if (s3[s3.size()-1]==' '&&(s1[i]==','||s1[i]=='.'||s1[i]=='?')) s3[s3.size()-1]=s1[i]; else if (!(s3[s3.size()-1]==' '&&s3[s3.size()-1]==s1[i])) s3+=s1[i]; } if (!(s1[i]==' '||s1[i]==','||s1[i]=='.'||s1[i]=='?')) s2+=s1[i]; } } } if (s3.size()>0) { while(s3.size()>0) { string::iterator iter1=s3.end(); --iter1; if(*iter1==' ') s3.erase(iter1); else break; } } cout<<s3<<endl; return 0; } ```
- 1
信息
- ID
- 952
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者