【发布时间】:2021-03-03 18:41:10
【问题描述】:
以这个字符串为例(“Hello World”)。如果您搜索此字符串中的每个元音并输出它,您将得到 eoo。在这种情况下,我希望不再找到 'o',所以它只剩下 e 和 o。
这是从“Hello World”输出“eoo”的代码。
char a[256], v[6]="aeiou";
cin.get(a, 256);
for(int i = 0; i < strlen(a); i++){
if(strchr(v, a[i])){
cout << a[i];
}
}
我考虑过删除从 v 中找到的每个元音,
因此,如果您发现 a[i] 是元音,请从 v 中删除该元音(例如,如果 a[i] 是 e,则 v 变为 aiou。
我想知道这是否是最有效的方法。
【问题讨论】:
-
首先,您没有
string,而是一个固定长度的char[]数组,并且您不能删除其中的任何字符。您可以做的是从右侧移入任何字符,并在新长度处添加另一个NUL。 -
出于纯粹的病态好奇心,如果一个字符在 both 字符串中多次出现,您的预期行为会是什么。 IE。 `“Hello, World”是你的源字符串,“aeioou”是你的过滤器集?
-
扩展上述内容,您可以使用数组做的最好的事情是将所有内容移到您想要向左移动一个空格的字符的右侧以覆盖“已删除”字符。不要忘记保留终止的 null。
-
如果您关心“最有效”,您可能会问自己要拨打多少次
strlen(a)