- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的任务是:
编写一个程序,读取最多为 # 的输入并报告序列 ei 出现的次数。
我写了一些在大多数时候都有效的东西,但是当它发送时会有输入...
像这样输入:(假设返回1)
sdlksldksdlskd
sdlsklsdks
sldklsdkeisldksdlk
#
number of combination is: 0
这是代码:
int main(void)
{
int index = 0;
int combinationTimes = 0;
int total = 0;
char userInput;
char wordChar[index];
printf("please enter your input:\n");
while ((userInput = getchar()) != '#')
{
if (userInput == '\n')
continue;
wordChar[index] = userInput;
index++;
total++;
}
for (index = 1; index < total; index++)
{
if (wordChar[index] == 'i')
{
if (wordChar[--index] == 'e')
{
combinationTimes++;
++index;
}
}
}
printf("number of combination is: %d", combinationTimes);
return 0;
}
你能告诉我使用这个输入我没有得到什么吗?
在书中他说用“接受你的 eieio 奖”来测试它并且它有效......但是在我玩了一会儿之后我发现并非总是如此。
最佳答案
把文件读入数组好像真的没必要。你只需要记录多少次ei
在您阅读 #
之前找到或到达 EOF:
#include <stdio.h>
int main(void)
{
int c;
int ei_count = 0;
while ((c = getchar()) != EOF && c != '#')
{
if (c == 'e')
{
int c1 = getchar();
if (c1 == 'i')
ei_count++;
else if (c1 != EOF)
ungetc(c1, stdin);
}
}
printf("ei appeared %d times\n", ei_count);
return(0);
}
测试(程序名为 ei
并从 ei.c
构建):
$ ei < ei.c
ei appeared 0 times
$ sed 1d ei.c | ei
ei appeared 1 times
$ sed 's/#/@/' ei.c | ei
ei appeared 4 times
$
第一个停止在 #include
行,第二个停在 #
在比较中,第三个读取整个文件。它还为示例数据提供了正确的输出。
您的主要问题是您没有为数组分配任何空间。从 index
更改数组的维度到,比如说,4096。这对于你的测试目的来说已经足够大了(但实际上程序应该注意数组而不是溢出它 - 但我认为数组根本不是必需的;见上面的代码).
下一个主要问题是尽管它的名字是getchar()
返回 int
, 不是 char
.它可以返回任何有效字符加上一个不同的值 EOF。所以它必须返回一个大于 char
的值. (如果使用 char
会发生两种情况之一。如果 char
是有符号类型,一些有效字符——通常是 ÿ、y-umlaut、U+00FF、带分音符的拉丁文小写字母 Y——也被视为 EOF,甚至尽管它只是一个字符。如果 char
是无符号类型,则没有输入匹配 EOF。这也不是正确的行为。)
解决这个问题很容易,但是您的代码没有检测到 EOF。始终处理 EOF;数据可能格式不正确。这是代码中的一个简单修复。
第三个问题是 printf()
语句不以换行结束;它应该。
这里的测试条件很奇怪:
if (wordChar[--index] == 'e')
{
combinationTimes++;
++index;
}
使用一个前增量和一个后增量很奇怪,但这只是一个一致性问题。更糟糕的是,当字符 i
出现时会发生什么?出现在输入中并且前面没有 e
.考虑 @include <stdio.h>
行: 你从 index
开始作为 1;那是一个i
,所以你递减索引,但是 wordChar[0]
不是 e
,所以你不会再递增它,但循环的结尾会递增,所以循环检查 index
1,并继续循环测试 i
是i
和 @
不是 e
很长一段时间。
没有理由先递减再递增 index
;只需使用:
if (wordChar[index-1] == 'e')
combinationTimes++;
修复了这些问题后,您的代码就可以正常运行了。您的麻烦主要是您使用的数组不够大(大小为 0),并且您正在用正在读取的数据覆盖准随机内存。
#include <stdio.h>
int main(void)
{
int index = 0;
int combinationTimes = 0;
int total = 0;
int userInput;
char wordChar[4096];
printf("please enter your input:\n");
while ((userInput = getchar()) != '#' && userInput != EOF)
{
if (userInput == '\n')
continue;
wordChar[index] = userInput;
index++;
total++;
}
printf("total: %d\n", total);
for (index = 1; index < total; index++)
{
if (wordChar[index] == 'i')
{
if (wordChar[index-1] == 'e')
combinationTimes++;
}
}
printf("number of combination is: %d\n", combinationTimes);
return 0;
}
请注意,您可以合理地编写嵌套的 if
作为:
if (wordChar[index] == 'i' && wordChar[index-1] == 'e')
combinationTimes++;
关于c - 从输入中检测字符组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575082/
我有一个 mysql 表,其中包含一些随机数字组合。为简单起见,以下表为例: index|n1|n2|n3 1 1 2 3 2 4 10 32 3 3 10 4 4
我有以下代码: SELECT sdd.sd_doc_classification, sdd.sd_title, sdd.sd_desc, sdr.sd_upl
如果我有两个要合并的数据框 Date RollingSTD 01/06/2012 0.16 01/07/2012 0.18 01/08/2012 0.17 01/09/20
我知道可以使用 lein ring war 创建一个 war 文件,但它似乎仍然包含码头依赖项。当我构建 war (并在 tomcat 上部署)时,有没有办法排除码头依赖项? 如果我根本不能做这件事,
维基百科关于封装的文章指出: “封装还通过防止用户将组件的内部数据设置为无效或不一致的状态来保护组件的完整性” 我在一个论坛上开始讨论封装,在那里我问你是否应该始终在 setter 和/或 gette
对于我使用的组合框内的复选框: AOEDComboAssociationName = new Ext.form.ComboBox({ id: 'AOEDComboAssociationName',
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I combine LINQ expressions into one? public boo
如何在 rust 中找到排列或组合的数量? 例如C(10,6) = 210 我在标准库中找不到这个函数,也找不到那里的阶乘运算符(这就足够了)。 最佳答案 以@vallentin 的回答为基础,可以进
我有一个复杂的泛型类型用例,已在下面进行了简化 trait A class AB extends A{ val v = 10 } trait X[T<:A]{ def request: T }
如何使用 Hibernate 限制来实现此目的? (((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z'))) 最佳答案 思考有效 Criteria c
我一定会在我的一个项目中使用谷歌图表。我需要的是,显示一个条形图,并且在条形图中,与每个条形相交的线代表另一个值。如果您查看下面的 jsfiddle,您会发现折线图仅与中间的条形图相交,并继续向其他条
只是一个简单的问题,我也很想得到答案,因为我不能百分百理解 Javascript 示例:假设您提示用户输入名称。够简单吧?但是你有一个数组,上面写着一些名字(其中之一就是),基本上就是我到目前为止所说
我试图通过 Haskell 理解函数式编程,但在处理函数组合时遇到了很多麻烦。 其实我有这两个功能: add:: Integer -> Integer -> Integer add x y = x
我正在寻找一种在 Realm 查询中组合 AND 和 OR 的方法。 这是我的课: class Event extends RealmObject { String id; String
例如,我有一个包含 5 个元素的哈希: my_hash = {a: 'qwe', b: 'zcx', c: 'dss', d: 'ccc', e: 'www' } 我的目标是每次循环哈希时都返回,但没
我是Combine 的新手,我想得到一个看似简单的东西。假设我有一个整数集合,例如: let myCollection = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 我想以例如 0
关于“优先组合而不是继承”的问题,我的老师是这样说的: 组合:现有类成为新类的组件 转发:新类中的每个实例方法,在现有类的包含实例上调用相应的方法并返回结果 包装器:新类封装了现有的 这三个概念我不是
我正在尝试将单个整数从 ASCII 值转换为 0 和 1。相关代码如下所示: int num1 = bin.charAt(0); int num2 = bin.charAt(1);
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 我经常看到“嵌套”类中的非静态变
我尝试合并两个数据集(DataFrame),如下所示: D1 = pd.DataFrame({'Village':['Ampil','Ampil','Ampil','Bachey','Bachey',
我是一名优秀的程序员,十分优秀!