1 条题解

  • 0
    @ 2025-5-4 8:37:37

    该问题通过遍历输入字符串,逐步构建结果字符串 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
    上传者