【发布时间】:2017-06-11 21:09:37
【问题描述】:
我有一个问题,我必须在以下规则之后打印从控制台读取的字符串:在两个连续的元音或辅音之后,我需要打印字符 _ 但如果结尾有两个元音或两个辅音,则不需要字符串,然后我必须打印由每个 _ 字符分隔的子字符串的数量。字符串被读取到 EOF。
我遇到了两个问题:
除非我在新行上键入 EOF (Ctrl-Z),否则程序不会终止。如果我只是将它添加到字符串的末尾,它将继续。
我需要一种方法来检查打印的最后一个字符是否为“_”,如果它位于打印字符串的末尾,则将其删除。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
char vow[]="aeiouAEIOU", c,x;
int nr=1;
x=getchar();
putchar(x);
while((c=getchar())!=EOF)
{
if(isalpha(c))
{
if (((strchr(vow,x)&&strchr(vow,c))||(!strchr(vow,x)&&!strchr(vow,c)))&&x!=0)
{
putchar(c);
putchar('_');
nr++;
x=0;
}
else
{
putchar(c);
x=c;
}
}
}
printf("\n%d",--nr);
return 0;
}
【问题讨论】:
-
您能否提供所需结果的示例输入/输出文本?
-
Ctrl-Z 的地址为:stackoverflow.com/questions/19372774/…
-
while((c=getchar())!=EOF)c应该是 int,而不是 char。 -
确实有你的代码。它出什么问题了?问题是什么?
-
附带说明一下,您拨打
strchr的频率比必要的要高。如果你想用 C 写一个a XOR b,你可以使用!a != !b(!strchr(vow,x) != !strchr(vow,c),另外否定你的情况的结果,所以它实际上是!strchr(vow,x) == !strchr(vow,c))。见stackoverflow.com/questions/1596668/logical-xor-operator-in-c
标签: c