- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在使用 Python 和 JS 等动态语言编程大约 5 年后,我开始觉得自己错过了幕后发生的事情。诸如此类的语言真的很棒,因为它们可以让你专注于你必须做的事情,利用使用指针、内存分配和许多搜索、排序、插入算法的麻烦。尽管我从不后悔使用这些语言,因为我真的觉得它们非常强大,但我觉得,为了成为一名更好的程序员,我需要退后一步,了解幕后发生的事情!
我决定通过编写一个简单的单词计数器来做到这一点:该应用程序获取所有参数并输出所有唯一单词,每个单词都有一个计数器:“Hello world Hello”将返回“Hello: 2”、“world: 1"(不考虑实际输出结构)。这个程序在 Python 中相当于:
import sys
from collections import defaultdict
def main():
results = defaultdict(int)
for word in sys.argv[1:]:
results[word] += 1
print results
用 C 语言编写有点不同,我觉得我对指针、指针数组和所有这些东西完全错了!我想变得更好,帮助我变得更好!!
#include <stdio.h>
#include <stdlib.h>
// This is what a key-value pair: <int, string>
typedef struct {
int counter;
unsigned char* word;
} hashmap;
// Checks if inside the array of results, hashmap->word is equals to word paramter
hashmap* get_word_from_results(hashmap* results[], int count, const char* word) {
int i;
hashmap* result;
for (i = 0; i < count; i++) {
result = results[i];
if (result->word == (unsigned char *)word)
return result;
}
return NULL;
}
int main(int argc, const char *argv[])
{
hashmap* results;
int results_counter = 0;
int i;
const char* word;
for (i = 1; i < argc; i++) {
word = argv[i];
hashmap* result = get_word_from_results(&results, results_counter, word);
// If result is NULL, means word is not inserted yet, let's create a new hashmap and insert it inside the array
if (result == NULL) {
hashmap h;
h.counter = 1;
h.word = (unsigned char *)word;
results = realloc(NULL, (results_counter + 1) * sizeof(hashmap) );
// NOTE: potential memory leak? would h be deallocated?
results[results_counter] = h;
results_counter++;
printf("NEW\n");
} else {
// The word already exists in the hashmap array, let's increase it by 1
result->counter++;
printf("INCREMENTED\n");
}
}
return 0;
}
谁能给我一些建议?我在这里做错了什么?我的指点还好吗?我还认为我发现了内存泄漏(见评论),有人愿意提交他们的版本吗??
谢谢!!你们太酷了!!
丹尼尔
最佳答案
程序中的主要指针问题是,当 hashmap* results
第一次传递给 realloc
时,其值未初始化。这是未定义的行为。您应该将指针初始化为 NULL
,如下所示:
hashmap* results = NULL;
另一个问题是比较字符串:您需要使用strcmp
而不是==
。请记住,当字符串相等时,strcmp
返回零。
在你的程序结束时也有内存泄漏。您应该释放 results
,以及存储在其元素中的单词。
当然,您称为 hashmap
的东西的行为与动态数组完全一样。然而,用 C 语言编写哈希表会带来不同程度的挑战,因此我鼓励您使用当前的方法。
关于c - C中的字数统计,学习更多CS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11468876/
嗨,我是excel的初学者,所以请原谅我的无知。 最近我发现自己需要一个函数来计算一系列单元格中的单词数(当然,将空单元格计为 0)。 在网上冲浪我发现了这个简单的 VBA 代码: Function
我是编程新手,这段代码不想工作,而且我已经没有想法了。它可以很好地读取文件,但不会计算任何内容。我知道它与 while 语句有关。这是针对两个单独的文件,但它们都需要显示在末尾。 #define _C
我用 Java 实现了一个字数统计程序。基本上,该程序需要一个大文件(在我的测试中,我使用了一个仅包含数字的 10 GB 数据文件),并计算每个“单词”出现的次数 - 在这种情况下,一个数字(例如 2
长话短说:1986 年,一位面试官要求 Donald Knuth 编写一个程序,输入文本和数字 N,并列出按频率排序的 N 个最常用的词。 Knuth 编写了一个 10 页的 Pascal 程序,Do
我有一个包含 2 个字段的表: cnt str -- ------- 60 the 58 of 4 no 30 the 2 of 1 no 我想要这样的结果 cnt
各位seoer应该都明白,要想网站有排名,收录是前提条件,没有收录完全谈不上排名、流量。但是内页的收录往往是seo最大的难题之一,笔者手上有一堆网站都是只被收录了首页或者几页内页,因此解决内页收录问
是否可以设置一个 checkstyle 规则来计算评论中的字数,然后在字数低于定义的限制时显示问题。我在checkstyle上搜索了Javadoc属性,但没有发现有用的东西。 例如: /** * S
我有一个名为“input.txt”的文本文件,其中包含: test line one test line two final line 编译并运行后通过 $ ./a.exe #include
我目前在带有 pandas 0.23.4 的 Jupyter Notebook (v5.6.0) 中使用 python3.7。 我编写了代码来标记一些日语单词,并成功应用了一个字数统计函数,该函数返回
我刚刚用出色的 Redactor 替换了 CKEditor(它伴随着大量与 AJAX 更新 DOM 相关的神秘问题) .我们以前使用 CKEditor 插件为我们提供富文本编辑器的字符数。我怎样才能用
我想在 Eclipse 集群上运行 hadoop 字数统计。但我收到错误。我更改了输出目录,但程序行为没有变化。你能帮我解决这个错误吗: 2013-10-23 23:06:13,783 WA
我正在尝试运行一个 wordcount 程序,但我收到以下代码的错误 job.setInputFormatClass(TextInputFormat.class); job.setOutputForm
这是 Hadoop 字数统计 java map 和 reduce 源代码: 在 map 函数中,我已经可以输出所有以字母“c”开头的单词以及该单词出现的总次数,但我想做的只是输出以字母“c”开头的单词
我是一名优秀的程序员,十分优秀!