【发布时间】:2016-05-03 19:53:39
【问题描述】:
我的任务是创建一个函数
打印一个表格,以相同的顺序显示每个不同单词在文本中出现的次数
我正在使用gets() 读取字符串,这是一个将字符串中的每个单词标记化并将其存储在二维数组中的函数,并且需要帮助弄清楚如何制作一个分析数组以查找重复项的函数.
这是分词器功能:
void tokeniz(char *array)
{
char words[arraySize][arraySize] = { NULL };
const char s[2] = " ";
char *token;
int i = 0;
token = strtok(array, s);
while (token != NULL)
{
strcpy(words[i], token);
token = strtok(NULL, s);
i++;
}
wotable(words);
}
在程序的早期,我有一个函数来计算每个字符在字符串中出现的次数(预标记)。我可以重新利用其中的一些代码吗?
void alpha(char *array)
{
char character = 'a';
int numberOf = 0, tcc = 0;
for (character = 'a'; character <= 'z'; character++)
{
tcc = (tcc + numberOf);
numberOf = 0;
for (int i = 0; i < arraySize; i++)
if (*(array + i) == character)
numberOf++;
if (numberOf != 0)
printf("\nNumber of %c's:\t\t%d\n", character, numberOf);
}
printf("\nTotal character count:\t%d\n\n- - - - - - - - - - - - - -", tcc);
}
【问题讨论】:
-
不显示代码很难说——但你不太可能没有
-
您应该很少使用
gets(),阅读link here 以了解原因。请改用fgets()。 -
不知何故,我觉得你的
alpha例程倒退了。想象一下,你想为单词写同样的东西;您会遍历本地字典文件并测试其中的每个单词以查看它是否在您的输入字符串中吗? -
1) 使用
gets()2) 在需要0或'\0'时使用NULL进行初始化 3)strcpy()没有长度保护都是最好避免的弱实践。 -
函数
gets()已经贬值了几年,并完全从C11 标准中删除。你的编译器应该已经告诉你了。强烈建议将gets()替换为fgets()(一定要阅读man page,因为参数完全不同。