0

コンピューター サイエンスの 1 つのコースのプロジェクトを行っていますが、char 値を含む配列の正確なサイズを取得しようとして問題が発生しています。最初に、プログラムは行を使用して char 値を入力するようにユーザーに求めます。cin.getline(array,100);その後、配列を取得し、配列の実際のサイズを返すと想定される getSize 関数に渡します。唯一の問題は、一貫性がないことです。正しい値を返す場合もありますが、そうでない場合もあります。getSize 関数:

int getSize(char arr[]){
    int i = 0;  
    for(i; '\0' != arr[i];i++){ 
    }
    return i;
}

例: arr[100] には 5 文字が含まれ、残りは null ですが、関数はプログラムの実行時に 7 を返します。これが問題かどうかはわかりませんが、プログラムはサイズ関数に送信する前に配列を変更します。重複を削除します。

4

4 に答える 4

1
template<size_t t_size>
size_t GetRealSize(const char (&str)[t_size])
{
    return std::count_if(&str[0], &str[t_size], [](char c) { return !!c; });
}

これはあなたが望むものかもしれません。

于 2013-10-31T05:01:40.213 に答える
0

sizeof()演算子を使用してサイズを簡単に取得できます...

あなたが持っている場合char a[10];

使用する

int size=sizeof(a);
于 2013-10-31T05:28:42.357 に答える
0

これは、ポインターだけでは実行できません。ポインターには、配列のサイズに関する情報は含まれていません。ポインターは単なるメモリ アドレスです。配列は関数に渡されるとポインターに分解されるため、配列のサイズが失われます。

1つの方法は、使用することですTemplates

template <typename T, size_t N>
size_t array(const T (&buffer)[N])
{
cout << "size: " << N << endl;
return N;
}

次に、次のように関数を呼び出すことができます (他の関数と同様)。

int main()
{
char a[10];
array(a);
}

出力:

size: 10
于 2013-10-31T05:02:30.373 に答える