【题解】
(实际在力扣中运行的代码只需要把下方的check函数放到力扣作答区给的模板中就可以)
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
#include <cstring>
#include <string.h>
using namespace std;
bool check(vector<char > s)
{
if(s.size()>=3)
{
int yy=0,fy=0,zc=0;
string fyset="bcdfghjklmnpqrstvwxyz";
string yyset="aoeiu";
for(int i=0;i<s.size();i++)
{
if((s[i]>='0'&&s[i]<='9')||((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z')))
{
char c=tolower(s[i]);
if(yyset.find(c)!=string::npos)
yy++;
if(fyset.find(c)!=string::npos)
fy++;
}
else {zc=1;cout<<"s[i]="<<s[i]<<endl;
}
}
//cout<<"fy="<<fy<<",yy="<<yy<<",zc="<<zc<<endl;
if(zc==1) return false;
else if(yy==0||fy==0)
return false;
else return true;
}
else return false;
}
int main(int argc, char** argv) {
char t;
vector<char> ss;
int flag=0;
while(cin>>t)
{
flag++;
if(t=='"'&&flag==1)
{
//flag=1;
continue;
}
else if(t=='"')
break;
if(flag>=2) ss.push_back(t);
}
for(int i=0;i<ss.size();i++)
{//cout<<ss[i];
}
// cout<<endl;
if(check(ss))
{
cout<<"true";
}
else cout<<"false";
return 0;
}
知识点:对字符串的各种操作、string函数
string s="hello lyh!";
1、截取字符串中的一部分
substr(起始位置的下标,截取的长度); //起始位置的下标从0开始
例如:
string ss=s.substr(0,5);// "hello"
2、确定某个集合中是否存在某个元素,可以用map中的count()函数,也可以用string中的内置函数find();
find()函数的所有用法:
在`std::string`类中,`find`函数有多种重载形式,用于查找不同的字符或字符序列。以下是`find`函数的所有重载形式及其参数含义:
1. `size_t find(const string& str, size_t pos = 0) const;`
- `str`:要查找的子字符串。
- `pos`:开始搜索的位置。默认值为0,表示从字符串的第一个字符开始搜索。
2. `size_t find(const char* s, size_t pos, size_t count) const;`
- `s`:要查找的字符序列。
- `pos`:开始搜索的位置。默认值为0,表示从字符串的第一个字符开始搜索。
- `count`:要查找的字符数量。如果`count`为0,则查找整个字符序列。
3. `size_t find(const char* s, size_t pos = 0) const;`
- `s`:要查找的字符序列。
- `pos`:开始搜索的位置。默认值为0,表示从字符串的第一个字符开始搜索。
4. `size_t find(const char ch, size_t pos = 0) const;`
- `ch`:要查找的字符。
- `pos`:开始搜索的位置。默认值为0,表示从字符串的第一个字符开始搜索。
这些函数的作用是返回字符串中第一个匹配的子字符串或字符的起始位置的索引。如果未找到匹配项,则返回`string::npos`。
3、如何在的输入时只读取一串字符串中的某一部分
如题解所示,
(1)、设输入的字符串为char数组,可以利用某个整数表示下标,设置下标为某个值是开始读;
(2)、设置输入的字符串为string类型,可以把整个字符串全读进来,再用substr()去截取;