第一次在StackOverflow上。在编程时对我的期末考试进行学习和编码时,我发现了一个我可以在心理上解决的问题,但是当我尝试将它放在C ++中时,它并没有真正起作用。
所以问题在于我的母语罗马尼亚语,但我会尝试翻译它。所以这个问题要我从键盘上读一个单词然后在屏幕上显示它,每次都消除一个元音。例如,如果我在我的程序中输入单词"编程"它应该显示:
我的代码如下所示:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char v[6]="aeiou",s1[21],s2[21];
int i,j;
cin.get(s1,20);
for(i=0;i<strlen(v);i++)
{
strcpy(s2,s1);
j=0;
while(j<strlen(s2))
{
if(strchr(v[i],s2[j])!='\0')
strcpy(s2+j,s2+j+1);
else
j++;
}
cout<<s2<<endl;
}
return 0;
我在&#34;如果&#34;声明,但我似乎无法找到它的解决方案。它删除了&#34; [i]&#34;来自&#34; v [i]&#34;,但我需要一次只消除一个元音,而不是所有元音。希望有人可以帮助我。谢谢!
编辑:问题解决了,我会把我的代码放在这里,因为问题来自罗马尼亚学士学位课程的编程
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char v[6]="aeiou",s1[21],s2[21];
int i,j,x;
cin.get(s1,20);
for(i=0;i<strlen(v);i++)
{
strcpy(s2,s1);
j=0;
while(j<strlen(s2))
{
if(s2[j]==v[i])
strcpy(s2+j,s2+j+1);
else
j++;
}
cout<<endl;
cout<<s2<<endl;
}
return 0;
}
对于这种误解感到抱歉,但在这里,我们没有被教导使用std::string::find_first_of
之类的内容,只使用strcmp
和stchr
之类的基本功能。
答案 0 :(得分:0)
好吧,你的最大错误就是你在迭代字符串之前迭代元音。
你应该迭代输入字符串,并且对于每个字符,检查它是否是元音。您可以使用strchr
而不是v
来检查字符是否为元音。
对于字符串中的每个字符,您有两种情况:
在第一种情况下,您应该从字符串中删除该字符,这意味着将字符串的剩余内容移到左侧。
例如,如果您的字符串是编程并且您跳转到第一个 o ,则必须将剩余的 gramming 移动到左:
0 1 2 3 4 5 6 7 8 9 10
p r o g r a m m i n g
p r g r a m m i n g
p r g r a m m i n g
在第二种情况下没有任何反应(除非您将字符串char通过char复制到辅助存储字符串,这是有效的,顺便说一下。)
查看以下解决方案,它使用[memmove][1]
将字符串向左移动,但也可以使用简单的for循环完成。阅读,研究并理解它。如果您需要更多帮助,请不要犹豫。
void incremental_vowel_removal(const char *instr) {
// the vowels
static const char *vowels = "aeiou";
// length of the input string
int len = strlen(instr);
// I will work on a copy of the string because it is easier
char *ostr = (char*)malloc((len+1) * sizeof(char));
strcpy(ostr, instr);
// for each char in the string
for (int i = 0; i < len; ++i) {
// if it is a vowel
if (strchr(vowels, ostr[i])) {
// shift remaining string to the left
// this will erase the currect character from the string
memmove(ostr+i, ostr+i+1, len-i);
// print this partial result
printf("%s\n", ostr);
// the length is decreased by one, so let's reflect it
len -= 1;
}
}
// free the allocated memory
free(ostr);
}
更新:我将calloc
替换为malloc
,因为无需对字符串进行零初始化,因为之后会调用strcpy
。