2016-10-26 3 views
0

Я привык к java и борюсь с основным синтаксисом C++, несмотря на знание теории. У меня есть функция, которая пытается подсчитать количество вхождений в строке, но выход является битом табуляции.Подсчет количества вхождений в строку C++?

Вот мой код:

#include <cstdlib> 
#include <iostream> 
#include <cstring> 
/* 
main 
* Start 
* prompt user to enter string 
* call function 
* stop 
* 
* count 
* start 
* loop chars 
* count charts 
* print result 
* stop 


*/ 
using namespace std; 

void count(const char s[], int counts[]); 

int main(int argc, char** argv) { 
int counts[26]; 
char s[80]; 
//Enter a string of characters 
cout << "Enter a string: "; // i.e. any phrase 

cin.getline(s,80); 

cout << "You entered " << s << endl; 
count(s,counts); 
//display the results 
for (int i = 0; i < 26; i++) 
if (counts[i] > 0) 
    cout << (char)(i + 'a') << ": " << counts[i] << "Times " << endl; 
return 0; 
} 
void count(const char s[], int counts[]){ 

for (int i = 0; i < strlen(s); i++) 
{ 
char c = tolower(s[i]); 
if (isalpha(c)) 
    counts[c - 'a']++; 

} 

} 

Вот результат:

Введите строку: Дилан

Вы вошли Дилан

B: 1Times

с: 1Тремы

д: 2times

F: 1Times

ч: 1Times

я: 1229148993Times

J: 73Times

л: 2times

н: 2times

p: 1Times

г: 1Times

v: 1Times

Любая помощь вы можете дать мне было бы весьма признателен. Несмотря на то, что это простой материал, я присоска. -_-

+1

'ИНТ рассчитывает [26] = {0};' ' – IInspectable

+0

Initialize counts'. В настоящее время вы не знаете, что сидит в памяти, и, как правило, C++ не инициализирует хранилище для вас, полагая, что если вам будет интересно, что это за значение, вы установите его. 'int count [26] = {0};' – user4581301

+0

int map [121]; вы можете сделать это таким образом. если вы алфавит - это все 7-битные символы –

ответ

2

Ваш counts неинициализирован. Вам необходимо сначала установить все элементы на 0.

+0

Мне удалось заставить его работать. –

2

Вам нужно зацикливать вектор count. Пробег counts[26]={0};

1

Я не знаю о java, но вы должны инициализировать свои переменные в C/C++. Вот ваш код рабочий:

#include <cstdlib> 
#include <iostream> 
#include <cstring> 
using namespace std; 
void count(const char s[], int counts[]){ 

    for (int i = 0; i < strlen(s); i++) 
    { 
     char c = tolower(s[i]); 
     if (isalpha(c)) 
      counts[c - 'a']++; 

    } 

} 

int main(int argc, char** argv) { 
    int counts[26]; 
    char s[80]; 
    //Enter a string of characters 
    cout << "Enter a string: "; // i.e. any phrase 

    cin.getline(s,80); 

    for(int i=0; i<26; i++) 
     counts[i]=0; 
    cout << "You entered " << s << endl; 
    count(s,counts); 
    //display the results 
    for (int i = 0; i < 26; i++) 
     if (counts[i] > 0) 
      cout << (char)(i + 'a') << ": " << counts[i] << "Times " << endl; 
    return 0; 
} 
+1

Вы пренебрегли [EBCDIC] (https://en.wikipedia.org/wiki/EBCDIC). Не волнуйся. Все делают. – user4581301

+0

Неопределенное поведение запускается при вызове isalpha. Вы должны изменить диапазон, а затем перевести на unsigned int –

+0

@self: вы подразумеваете, что документация cppreference для [isalpha] (http://en.cppreference.com/w/cpp/string/byte/isalpha) неверна ? – IInspectable

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