【发布时间】:2017-03-11 15:05:59
【问题描述】:
我是 C 新手,我编写了以下代码:
for(i=0; i<25; ++i) {
ch=getchar();
if (ch == 'A' || ch == 'B'|| ch == 'C'|| ch == 'D'|| ch == 'a'|| ch == 'b'|| ch == 'c'|| ch == 'd'){
putchar(toupper(ch));
}
}
我希望我的代码过滤掉字母“a、b、c 和 d”,并将它们显示为输出当且仅当有一个可以与 B 配对的 A(B 相同)和 C 可以与D配对。(大写输出)
我为此使用了 for 循环,以便每次进入循环时都会获取字母。
我不希望我的代码包含数组。
示例输入和预期输出:
输入:ATASHPPOTCBD
输出:ACBD
它写入第一个 A 是因为它能够与 B 配对,但不能与第二个 A 配对。它还写入 C 和 D,因为它们能够配对。
【问题讨论】:
-
您能否编辑您的问题 以显示一些示例输入以及预期(和实际)输出?
-
@Someprogrammerdude 添加,感谢您的反馈!
-
所以如果我理解正确的话,当你找到第一个
'A'时,你会搜索第一个'B',当你找到第二个'A'时,你会搜索可能的第二个'B'.如果第二个'A'没有匹配的第二个'B',则不会打印'A'。那是对的吗?如果是这样,您不能只使用单个循环来执行此操作,您需要嵌套循环来搜索'B'。并且您需要跟踪您当前拥有的'A'(第一、第二、第三等),以知道要找到哪个'B'。 -
没错,你做对了。我打算使用嵌套循环,但我很难尝试建立算法,因为我无法找到第一个 A 并寻找第一个 B。
-
您的问题仍然没有明确说明。似乎您应该忽略并且不打印除 A、B、C 或 D(或其小写对应项)之外的任何字符。目前尚不清楚您是否必须准备好处理千兆字节文件或仅处理单行,以及单行可能有多长。看来您必须记录有趣的字母序列,以便确定如何打印它们。您提到“B 相同”,但不清楚这意味着什么。 “BADC”的输出应该是什么? 'AAAAAAAABCCCCDDDDDDDDDDDDDCC 的输出应该是什么?猜测:'ABCCCCDDDD'?