2

今日面接を受けて、2 つの文字列を連結する関数を書くように言われました。しかし、私が終わった後、私は聞いたことがあります、コードは一般的に問題ありませんが、私はそこで少しエラーをしました. 自宅で確認しましたが、問題なく動作しています。どうしたの?

char * strconcat (char *S1, char *S2){
    char *S3 = new char [strlen(S1) + strlen(S2) +1];
    strcpy(S3, S1);
    strcat(S3, S2);
    return S3;   
} 
4

4 に答える 4

5

ええと...それはすべて、要件と品質の期待に関するものだと思います。

いくつかのこと:

  • 入力ポインタはconst.
  • 失敗を処理しませんnew[](ただし、例外がスローされますが、これは問題ない可能性があります)。
  • strcpy()パフォーマンスのためには、 /シーケンスを実行しないのが最善です。これはstrcat()、ストリングを歩くのに必要な時間よりも多くの時間を費やすためです。
  • スタイル的には、少し「オフ」です。C コードとよく似ていますが、C++ 構造を使用します。
于 2013-01-23T09:37:19.510 に答える
2

C コード ( を除くnew) を作成する以外に、コードは期待どおりに動作しません。たとえば、次のようになります。

char* hellowWorld = strconcat("Hello ", "world!");

これがうまくいかない理由が直接わからない場合は、コンパイルしてみてください。エラーがヒントになります。

于 2013-01-23T09:37:53.523 に答える
1
char * strconcat (char *S1, char *S2){
    if(S1 == NULL || S2 == NULL)
         return NULL;
    int S1_len = strlen(S1);
    int S2_len = strlen(S2);
    char *S3 = new char [S1_len + S2_len +1];
    memset(S3, 0, S1_len + S2_len +1);
    strcpy(S3, S1);
    strcat(S3, S2);  // or memcpy(S3+S1_len, S2, S2_len);
    return S3;   
}
于 2013-01-23T13:42:06.070 に答える
0

コーディングで C と C++ の両方のスタイルを混同しているように見えます。また、 new を使用しようとする方法は標準的な方法ではありません。純粋な C の方法または C++ の方法のいずれかを作成できます。

スタイルをエラーとして扱っているようですが、インタビュアーの心は予測できません。

于 2013-01-23T13:14:46.097 に答える