2013-04-18 5 views
1

Я новичок в C++, что я пытаюсь сделать, это подсчитать количество раз, когда письмо встречается с фрагментом текста или абзаца и хранит его в массиве, называемом частотным массивом.Count Вхождения в цикле for C++

Код ниже работает в определенной степени, что происходит, если пользователь вводит hello frequencyarray сохраняет 11121, если пользователь набирает частотный массив aaba, хранит 1213 . Я не хочу, чтобы общая сумма я хотел, чтобы массив магазин 1121 и 31. поэтому, если появляется одна и та же буква, она добавляет 1 к массиву.

Благодаря Дэвид

#include <iostream> //for cout cin 
#include <string> //for strings 
#include <fstream> //for files 

using namespace std; 

int main() 
{  
    string text; 

    int frequencyarray [26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 

    cout << "Enter Word: "; 
    cin >> text; 

//***************************COUNT OCCURANCES************************ 

    for (int i(0); i < text.length(); i++) 
    { 
     char c = text[i]; 

     c = toupper(c); 
     c -= 65; 

     if (c < 26 || c >=0) 
     { 
      frequencyarray[c]++; 
      cout << frequencyarray[c]; 
     } 
    } 

    system ("pause"); 

return(0); 

}` 
+2

Не проблема, что вы outputing содержимое массива в цикле? В первый раз, когда вы найдете письмо «a», тогда 1 будет напечатано в следующий раз 2 и так далее. Дамп массива вне цикла, и вы получите правильный результат. – Cyclonecode

+3

Вы также должны использовать '&&' в if-statement. Прямо сейчас * все * персонажи будут квалифицироваться. –

+0

Вы также можете использовать 'c - = 'A';' вместо константы '65'. – Slagh

ответ

2

Если вы не хотите, нарастающим итогом, не имеют cout << freqencyarray[c]; внутри цикла, который рассчитывает вхождения.

0

Попробуйте

#include <iostream> //for cout cin 
#include <string> //for strings 
#include <fstream> //for files 
#include <algorithm> 

using namespace std; 

int main() 
{  
    string text; 

    int frequencyarray [26]={0}; 

    cout << "Enter Word: "; 
    cin >> text; 

//***************************COUNT OCCURANCES************************ 

    for (int i(0); i < text.length(); i++) 
    { 
     char c = text[i]; 

     c = toupper(c); 
     c -= 65; 

     if (c < 26 || c >=0) 
     { 
      frequencyarray[c]++; 
     } 
    } 

    std::for_each(std::begin(frequencyarray), std::end(frequencyarray), [](int i) 
    { 
     std::cout << i << ","; 
    }); 
    std::cout << "\n"; 
    system ("pause"); 

return(0); 

}