2016-04-09 16 views
0

配列として初期化関数にポインタとして渡して初期化しようとしています。私のプログラムはエラーなしでコンパイルされますが、実行するとエラーになります。それは文字カウントを出力して停止します。配列初期化関数:ポインタを配列として渡す:C++

これは私がこれまで持っているものです。

#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]; 
    } 
} 

は、私がここに何も悪いことをやっていることはよく分かりません。しかし、私は、ポインタが別の関数に渡された後にポインタがどのように動作するかについて少し混乱しています。誰か説明できますか?

はおそらく
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; 
    } 
} 

std::fill

見たい

+0

初期化関数では、nの値を出力します。 – MikeC

+0

"停止"?ハングアップ?クラッシュ?ちょうど終了? – hyde

+0

それは文字数を表示してから終了します – Ambrus

答えて

2

ありがとうおよびb)whileループボディ

cout << " Character " << " Count " << endl; 
    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl; 
    } 
    return 0; 
} 
オフ return 0;を移動します

編集:あなたはC++で開発している場合a)の
に関するあなただけ

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

ああ、今私は戻って0に気付かなかったので、私は本当に愚かな気がします。 whileループの中に入っていて、あなたが私の機能を修正したやり方は、元々それを持っていた方法です。ありがとう、VolkerK。 – Ambrus

0

代わりにコンテキスト与えられたあなたのinitialize()関数または()の

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

を使用することができ、なぜ代わりにベクトルを使用しますか? (配列*の作業はCスタイルです)。

vector<int> array(n, value); 

n =整数です。 value =各配列セルに配置する値。

関連する問題