#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char test[10] = "ciaociaoci";
max_caratt(test, 10);
}
int max_caratt(char input[], int size)
{
int i;
char max[300];
max[0] = input[0];
for (i=0; i<size; i++)
{
if(strncmp(input,input[i],1) == 1)
{
printf("occourrence found");
max[i] = input[i];
}
}
}
任何帮助?
答案 0 :(得分:7)
实际上,正确的代码是这样的。
它只是IntermediateHacker下面片段的修正版本。
void main()
{
int array[255] = {0}; // initialize all elements to 0
char str[] = "thequickbrownfoxjumpedoverthelazydog";
int i, max, index;
for(i = 0; str[i] != 0; i++)
{
++array[str[i]];
}
// Find the letter that was used the most
max = array[0];
index = 0;
for(i = 0; str[i] != 0; i++)
{
if( array[str[i]] > max)
{
max = array[str[i]];
index = i;
}
}
printf("The max character is: %c \n", str[index]);
}
答案 1 :(得分:2)
找到最常见字符的最简单方法是创建一个255的int数组,并只增加与该字符对应的arraly元素。例如:如果字符为'A',则递增'A'元素(如果查看任何ascii表,您将看到字母'A'的小数值为65)
int array[255] = {0}; // initialize all elements to 0
char str[] = "The quick brown fox jumped over the lazy dog.";
int i, max, index;
// Now count all the letters in the sentence
for(i = 0; str[i] != 0; i++)
{
++array[str[i]];
}
// Find the letter that was used the most
max = array[0];
index = 0;
for(i = 0; str[i] != 0; i++)
{
if( array[i] > max)
{
max = array[i];
index = i;
}
}
printf("The max character is: %c \n", (char)index);
答案 2 :(得分:1)
您将(几乎)字符串和字符传递给strncmp()
。 strncmp()
需要两个字符串(和一个整数)。你的程序甚至不应该编译!
建议:提高编译器的警告级别,注意警告。
您可能需要查看strchr()
...
答案 3 :(得分:1)
假设输入数组为0-127,以下内容应该会在单个字符串传递中获得最常见的字符。请注意,如果您想担心负数,请根据需要将所有内容调高+127 ......
char mostCommonChar(char *str) {
/* we are making the assumption that the string passed in has values
* between 0 and 127.
*/
int cnt[128], max = 0;
char *idx = str;
/* clear counts */
memset((void *)cnt, 0, sizeof(int) * 128);
/* collect info */
while(*idx) {
cnt[*idx]++;
if(cnt[*idx] > cnt[max]) {
max = *idx;
}
idx++;
}
/* we know the max */
return max;
}
答案 4 :(得分:0)
如果您不需要保留输入数组,则可以先对输入数组进行排序,然后找到单个字符的最长连续运行。这种方法较慢,但使用的空间较少。
答案 5 :(得分:0)
我使用结构制作了一个工作版本。我猜,它运行正常,但我认为有更好的方法来编写这个算法。
#include <stdio.h>
#include <stdlib.h>
struct alphabet {
char letter;
int times;
};
typedef struct alphabet Alphabet;
void main() {
char string[300];
gets(string);
Alphabet Alph[300];
int i=0, j=0;
while (i<=strlen(string)) {
while(j<=300) {
if(string[i] != Alph[j].letter) {
Alph[i].letter = string[i];
Alph[i].times = 1;
}
else {
Alph[j].times++;
}
j++;
}
j=0;
i++;
}
int y,max=0;
char letter_max[0];
for (y=0; y<strlen(string); y++) {
printf("Letter: %c, Times: %d \n", Alph[y].letter, Alph[y].times);
if(Alph[y].times>max) {
max=Alph[y].times;
letter_max[0]=Alph[y].letter;
}
}
printf("\n\n\t\tMost frequent letter: %c - %d times \n\n", letter_max[0], max);
}
答案 6 :(得分:0)
我看到你们都在创建大数组和“复杂”的东西,所以在这里我有简单易用的代码xD
indexed and assoc