作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的项目中,我从用户那里获取一个字符串,然后我需要检查元音字母 a、e、I、O、U 是否存在。如果是这样,我必须找出哪个在字符串中排在第一位,哪个在其后。例如,如果用户输入如下内容:
char expr[] = "this is for something real";
我先来,然后是我,然后是 O,依此类推。我使用 strchr(expr,'character here')
检查字符是否在字符串中。为了找到哪个字符先出现,我使用
const char *ptr = strchr(expr, characters here);
if(ptr) {
int index = ptr - expr;
}
之后我检查哪个索引更大。但这是一个非常漫长的过程。有没有更聪明的方法来做到这一点?
最佳答案
如果您不需要原始字符串中的位置,而只需要顺序,您可以将 std::remove_copy_if
与检测非元音字符的仿函数一起使用(即对元音返回 true ):
std::string only_vowels;
std::remove_copy_if( std::begin(expr), std::end(expr),
std::back_inserter(only_vowels),
[]( char ch ) { char upper = toupper(ch);
return upper!='A'
&& upper!='E'
&& upper!='I'
&& upper!='O'
&& upper!='U'; } );
(使用 C++11 功能获取迭代器和 lambda 而不是创建仿函数,但同样可以用 C++03 编写,并带有一些额外的样板代码。代码未经测试)
算法完成后,only_vowels
将仅包含原始字符串中出现的元音字母,并按照它们出现的确切顺序排列。算法不修改大小写。
或者,您可以手动遍历字符串中的元素,并测试每个字符以查看它是否是元音字母,然后打印它或执行任何需要完成的操作。如果这是家庭作业,这可能是您的期望。
关于c++ - c++ 4个字符中哪个字符排在第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112162/
我是一名优秀的程序员,十分优秀!