如何在 C 中打印带有计数的字符串中的重复字母?
How to print duplicate letters in a string with their count number in C?
我一直在实施一种算法,用于计算和打印 C 字符串中的重复字母(两次或更多次)。
示例:
如果输入字符串是:"Hello There"
输出应该是:
e - 3
h - 2
l - 2
我当前的代码一直在打印我需要的内容,但它不考虑大写字母,它还不断给我消息stack smashing detected (core dumped)
。所以,它不能正常工作,我不确定为什么 :
#include <stdio.h>
#include <string.h>
int main()
{
char string[10];
int c = 0, count[26] = {0};
printf("Enter a string of size [10] or less:\n");
gets(string);
while (string[c] != '[=11=]')
{
/**reading characters from 'a' to 'z' or 'A' to 'Z' only
and ignoring others */
if ((string[c] >= 'a' && string[c] <= 'z') || (string[c] >= 'A' && string[c] <= 'Z'))
{
if (string[c] >= 'a' && string[c] <= 'z')
{
count[string[c]-'a']++;
}
else if (string[c] >= 'A' && string[c] <= 'Z')
{
count[string[c]-'A']++;
}
}
c++;
}
for (c = 0; c < 26; c++)
{
/** Printing only those characters
whose count is at least 2 */
if (count[c] > 1)
printf("%c - %d \n",c+'a',count[c]);
}
return 0;
}
"Hello There"
不适合大小为 10
的字符数组。这是为什么你不应该使用 gets
.
的一个很好的例子
使用:
fgets(string, sizeof(string), stdin);
我一直在实施一种算法,用于计算和打印 C 字符串中的重复字母(两次或更多次)。
示例:
如果输入字符串是:"Hello There"
输出应该是:
e - 3
h - 2
l - 2
我当前的代码一直在打印我需要的内容,但它不考虑大写字母,它还不断给我消息stack smashing detected (core dumped)
。所以,它不能正常工作,我不确定为什么 :
#include <stdio.h>
#include <string.h>
int main()
{
char string[10];
int c = 0, count[26] = {0};
printf("Enter a string of size [10] or less:\n");
gets(string);
while (string[c] != '[=11=]')
{
/**reading characters from 'a' to 'z' or 'A' to 'Z' only
and ignoring others */
if ((string[c] >= 'a' && string[c] <= 'z') || (string[c] >= 'A' && string[c] <= 'Z'))
{
if (string[c] >= 'a' && string[c] <= 'z')
{
count[string[c]-'a']++;
}
else if (string[c] >= 'A' && string[c] <= 'Z')
{
count[string[c]-'A']++;
}
}
c++;
}
for (c = 0; c < 26; c++)
{
/** Printing only those characters
whose count is at least 2 */
if (count[c] > 1)
printf("%c - %d \n",c+'a',count[c]);
}
return 0;
}
"Hello There"
不适合大小为 10
的字符数组。这是为什么你不应该使用 gets
.
使用:
fgets(string, sizeof(string), stdin);