【发布时间】:2020-07-03 23:13:52
【问题描述】:
我正在尝试创建一个程序来检查命令行参数字符串中的重复字符。假设该字符串仅包含 26 个字符,并且所有字符都必须是字母顺序。但是,字符串中不能有任何重复的字符,每个字母字符只能出现一次。我想出了程序的前两个部分,但我不知道如何检查重复的字符。我真的可以使用一些帮助和解释。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main (int argc, string argv[])
{
if (argc != 2)
{
printf("Usage: ./substitution key\n");
return 1;
}
else
{
int len = strlen(argv[1]);
if (len != 26)
{
printf("Key must contain 26 characters.\n");
return 1;
}
else
{
for (int i = 0; i < len; i++)
{
if (!isalpha(argv[1][i]))
{
printf("Usage: ./substitution key\n");
return 1;
}
}
}
}
}
【问题讨论】:
-
您需要 26 个计数器,每个字母对应一个,以便计算每个字母出现的频率。执行此计数后,您必须验证所有 26 个计数器的值是否为 1(这意味着每个字母恰好出现一次)。为了分配这 26 个计数器,您可以声明 26 个单独的局部计数器变量或一个包含 26 个元素的数组。
-
保留一个地图并将其初始化为零。对于每个字符,检查它是否以前找到过。如果未找到,则将值增加到 1,否则重复此字符。
-
@AsifMujtaba:如果你指的是
std::map,请注意这个问题被标记为C,而不是C++。当然,也可以在 C 中实现一个映射,但是对于这个简单的问题来说,这似乎是一项过多的工作。 -
实际上可以通过数组来完成。我的逻辑是使用 hashMap。谢谢指正。
-
@Patrick Dankyi 大写和小写字母,例如“a”和“A”是不同的字母吗?