2016-04-09 5 views
0

Ich versuche, Arrays zu initialisieren, indem Sie sie als Zeiger an eine Initialisierungsfunktion übergeben. Mein Programm kompiliert ohne Fehler, aber wenn ich es ausführe; es druckt Zeichenzählung aus und stoppt. DieseArray-Initialisierungsfunktion: Übergabe von Array als Zeiger: C++

ist das, was ich bisher:

#include<iostream> 
#include<cctype> 
#include<string> 
#include<iomanip> 

using namespace std; 

void initialize(int *array, int n, int value);  

int main() 
{ 
char ch; 
int punctuation, whitespace, digit[10], alpha[26]; 

punctuation = 0, whitespace = 0; 

initialize(digit, sizeof(digit)/sizeof(int), 0); 
initialize(alpha, sizeof(alpha)/sizeof(int), 0); 

while(cin.get(ch)) 
{ 
    if(ispunct(ch)) 
     ++punctuation; 
    else if(isspace(ch)) 
     ++whitespace; 
    else if(isdigit(ch)) 
     ++digit[ch - '0']; 
    else if(isalpha(ch)) 
    { 
     ch = toupper(ch); 
     ++alpha[ch - 'A']; 
    } 

    if(whitespace > 0) 
    { 
     cout << "Whitespace = " << whitespace << endl; 
    } 

    if(punctuation > 0) 
    { 
     cout << "Punctuation = " << punctuation << endl; 
    } 

    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl; 
    cout << " Character " << " Count " << endl; 
    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl; 


    return 0; 
} 
} 

void initialize(int *array, int n, int value) 
{ 
    int i;  

    for (i = 0; i < n; ++i) 
    { 
    value += array[i]; 
    } 
} 

Ich bin nicht sicher, dass ich etwas falsch hier tue. Obwohl ich bin ein wenig verwirrt darüber, wie Zeiger funktionieren, nachdem sie an eine andere Funktion übergeben wurden. Kann jemand das erklären?

Danke

+0

In der Initialisierungsfunktion, drucken Sie den Wert von n. – MikeC

+0

"Stoppt"? Hängt? Stürzt ab? Nur Ausgänge? – hyde

+0

Es druckt Character Count und dann – Ambrus

Antwort

2

Sie wollen wahrscheinlich
a)

void initialize(int *array, int n, int value) 
{ 
    int i;  

    for (i = 0; i < n; ++i) 
    { 
    // no: value += array[i]; but: 
    array[i] = value; 
    } 
} 

auch std::fill

und b) bewegen, um die return 0; aus der while-Schleife-Körper

cout << " Character " << " Count " << endl; 
    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl; 
    } 
    return 0; 
} 
sehen

edit: in Bezug auf a)
können Sie

std::fill(std::begin(digit), std::end(digit), 0); 
std::fill(std::begin(alpha), std::end(alpha), 0); 

oder anstelle Ihres initialize() Funktion (angesichts der Kontext) nur

int punctuation, whitespace, digit[10]={0}, alpha[26]={0}; 
+0

Oh wow, jetzt fühle ich mich wirklich dumm, weil ich nicht einmal bemerkt habe, dass die Rückkehr 0; war in der While-Schleife, und die Art und Weise, wie Sie meine Funktion korrigiert haben, ist so, wie ich sie ursprünglich hatte. Danke, Volkerk. – Ambrus

0

Wenn Sie in C++ entwickeln, warum nicht Benutze stattdessen Vektoren? (Arbeiten mit Arrays * ist sehr C-Stil).

vector<int> array(n, value); 

n = Anzahl der ganzen Zahlen. Wert = Wert, der in jeder Array-Zelle platziert werden soll.