2015-01-20 3 views
0

Программа, которую я написал, вычисляет, сколько раз каждая буква появляется в строке. Я хочу изменить его, чтобы он нашел символ, который появляется большое количество раз подряд, т. Е. Для строки «aabbbcccca» я хочу напечатать f «c» (так как есть четыре c в строке и только два a и три б).Вычисление символов apperances в строке

Как изменить мою программу, что она будет делать то, что я хочу? Я ищу решение, которое будет максимально простым, и я хочу как можно больше использовать существующий код.

#include "stdafx.h" 
#include "string.h" 
#include "ctype.h" 

int count_nonspace(const char* str) 
{ 
    int count = 0; 
    while (*str) 
    { 
     if (!isspace(*str++)) 
      count++; 
    } 
    return count; 
} 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int a[127]; 
    int i = 0, j = 0, count[127] = { 0 }; 

    char string[100] = "Hello world"; 
    for (i = 0; i < strlen(string); i++) 
    { 
     for (j = 33; j<127; j++) 
     { 
      if (string[i] == (j)) 
      { 
       count[j]++; 
      } 
     } 
    } 
    for (j = 0; j< 127; j++) 
    { 
     if (count[j] > 0) 
     if (j < ' ' + 1) 
      printf("\n%d -> %d", count[j], j); 
     else 
      printf("\n%d -> %c", count[j], char(j)); 
    } 

} 

Моя идея для изменения кода заключается в следующем (размещена только измененная часть): , но до сих пор результаты не как ожидалось, почему это?

for (i = 0; i < strlen(string); i++) 
{ 
    for (j = 33; j<127; j++) 
    { 

     if (string[i] == (j)) 
     { 

      count[j]++; 
      if (string[i] == string[i + 1]) 
       count[j]++; 
      else 
       best[j] = count[j]; 
     } 
    } 
} 
+1

'для (J = 33, J <127; j ++), если (строка [я] == J) рассчитывать [J] ++;' можно переписать только 'J = строка [ я]; if (32

+0

_I хочу использовать существующий код как можно больше. Вы можете использовать большую часть своего кода. После вашего первого прохода у вас есть счет каждого персонажа. Теперь найдите символ, счетчик которого имеет наибольшее значение с помощью простого метода. –

+0

Вам понадобятся два массива: 'count [127]' и 'best [127]'. Когда символ изменяется, обновите массив 'best', если это необходимо. – user3386109

ответ

0
#include "stdafx.h" 
#include "string.h" 
#include "ctype.h" 

int count_nonspace(const char* str) 
{ 
    int count = 0; 
    while (*str) 
    { 
     if (!isspace(*str++)) 
      count++; 
    } 
    return count; 
} 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int a[127]; 
    int i = 0, j = 0, count[127] = { 0 }; 

    int cur_count = 1; /* Gets compared with value in count[] */ 
    char cur_char = '\0'; 
    char string[100] = "Hello world"; 
    for (i = 0; i < strlen(string); i++) 
    { 
     if(cur_char == string[i]) 
     { 
      cur_count++; 
     } 
     else 
     { 
      if(32 < cur_char && cur_char < 127) 
      { 
       if(cur_count > count[cur_char]) 
       { 
        count[cur_char] = cur_count; 
       } 
      } 
      cur_char = string[i]; 
      cur_count = 1; 
      if(32 < cur_char && cur_char < 127) 
      { 
       if(!(count[cur_char])) 
       { 
        count[cur_char] = cur_count; 
       } 
      } 
     } 
    } 

    /* Find the most consecutive char and print it. */ 
    char max_char = '\0'; 
    int max_count = 0; 
    for(j = 0; j < 127; j++) 
    { 
     if(max_count < count[j]) 
     { 
      max_count = count[j]; 
      max_char = j; 
     } 
    } 
    printf("%c\n", max_char); 
} 
+0

Какая будет функция printf, которая будет печатать элемент, с наибольшим числом сторон в строке? – Krowskir

+0

@Krowskir Создано отредактировано. Думаю, теперь это должно сработать. – Matthew

+0

@Krowskir Придется удалить эту последнюю часть. Теперь он должен просто напечатать максимальный символ. – Matthew

Смежные вопросы