関数strcpy()の役割はわかっていますが(「\ 0」を含む文字列を別の文字列にコピーしてカバーします)、関数を自分で作成するように依頼するインタビュアーがいます。この関数の関数は同じです。以下のようなstrcpyの。それはまったく同じです。
** strcpy()**関数を使用したコード
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[]="#################";
char arr2[]="123**";
strcpy(arr1,arr2);
ptintf("%s",arr1);
return 0;
}
インタビュアーはあなたのコードを要求します:
#include <stdio.h>
void my_strcpy(char arr1[], char arr2[])
{
int i = 0;
while (1)
{
if (arr2[i] != '\0')
arr1[i] = arr2[i];
else if (arr2[i] == '\0')
{
arr1[i] = arr2[i];
break;
}
i++;
}
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
いいやつ???ここにあると思いますか???本当に簡単ですか???通常のループで完了しますか???私はかなり勇敢です
するとインタビュアーは、10ポイント獲得すると4ポイントしか獲得できず、プログラミング能力が良くないと言うでしょう...
さて、あなたは時間を遡って、戻って最適化について考える機会があります、カウントダウンが始まります、3 2 1 0
最適化されたコード:
#include <stdio.h>
void my_strcpy(char* arr1, char* arr2)
{
while(*arr2 != '\0')
{
*arr1 = *arr2;
arr2++;
arr1++;
}
*arr1 = *arr2;/*保证'\0'也穿过去*/
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
え?ポインタを使うのか?コードの能力はかろうじて大丈夫だ、私はあなたに6ポイントを与えて、それからあなたに尋ねる、若い男??あなたはまだあなたのコードを最適化することができるか?そうでなければ、あなたは排除されるだろう...
あなたは自分自身に、mmp、最適化する方法を考えます、そしてそれからあなたの頭脳を揺さぶる方法はありません、最後にそれを考えてください、時間が戻ります、
再び最適化されたコード:
#include <stdio.h>
void my_strcpy(char* arr1, char* arr2)
{
while(*arr2 != '\0')
{
*arr1++ = *arr2++;
}
*arr1 = *arr2;/*保证'\0'也穿过去*/
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
え?このコードデザインはかなり良いですか?私はあなたに7ポイントを与えることはほとんどありません、ええと、私はあなたがそれを最適化するのを手伝うことができます、そしてあなたはそれを再び最適化できますか?私の最適化はこのようなもので、あなたがこれに関数を変えるのを助けます
void my_strcpy(char* arr1, char* arr2)
{
while(*arr1++ = *arr2++) /*利用'\0'的值为0*/
{
;
}
}
??? what ??? LZはこのようにするために一生懸命働いた、あなたは実際に私がそれを最適化するのを手伝ってくれて、それから私がそれを再び最適化できるかどうか私に尋ねた??私は妖精ですか?
うーん...人々は軒下にいて、頭を下げ、心をmmpし、顔を笑顔にする必要があります。何を最適化する必要がありますか?情報を確認してください...バックタイム...
このように設計されています:
#include <stdio.h>
void my_strcpy(char* arr1, char* arr2)
{
if(arr1 != NULL && arr2 != NULL) /*避免了野指针与传入空指针问题*/
{
while(*arr1++ = *arr2++)
{
;
}
}
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
ええと...男の子、私はあなたが少し好きです、この書き方、私はあなたに7.5ポイントを与えます、私はそれがかなり良いと思います、ええと...あなたはあなたのコードを最適化できますか?
ええと...私は...私はそれが本当にこのように最適化できるかと思いましたか?それは私と遊んでいますか、非常に多くの最適化、毎回は一度よりも優れています、他に何ができますか?設定の理由今回の判断はnullポインタを避けるためです。次回は???ああ〜、これは大きな問題ではありませんが、エラーは表示されません。arr1が過去をコピーしていない理由がわかりません。
さあ、時間を遡って...
今回のコード:
#include <stdio.h>
#include <assert.h>
void my_strcpy(char* arr1, char* arr2)
{
assert(*arr1 != NULL);
assert(*arr2 != NULL);
while(*arr1++ = *arr2++)
{
;
}
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
ねえ、私はアサーションを使用します、あなたが言うことを見てください
ええと...男の子、コード能力はかなり強いです、このデザインはプログラムを強くします、悪くはありません、私はそれが好きです...、あなたに8ポイントを与えます、しかし質問があります、あなたはそれを最適化できますか?
何???最適化する必要がありますか???、それはこのように書かれています、それはまだ最適化できますか???私はそれについて考えます...
どうすればそれを最適化できますか?今は他の人の間違いを避けていましたが、自分自身の間違いを避ける必要がありますか?え?私は知っているようです...バックタイム...
#include <stdio.h>
#include <assert.h>
void my_strcpy(char* arr1,const char* arr2) /*防止自己下面写循环的时候写反了,写成*arr2++ = *arr1++*/
{
assert(*arr1 != NULL);
assert(*arr2 != NULL);
while(*arr1++ = *arr2++)
{
;
}
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
ええと...若い男、それは本当に良いです。このコードに9ポイントを与えます。これは、優れたプログラマーと完全に一致していますが、提案したいと思います。my_strlenを最適化できますか?可能であれば、直接登録する
いいやつ、私は数えます、あなたは何回最適化しましたか?6回...そして最適化されました...私は再試行します...時間を遡ります...
コード
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* arr1,const char* arr2) /*防止自己下面写循环的时候写反了,写成*arr2++ = *arr1++*/
{
assert(*arr1 != NULL);
assert(*arr2 != NULL);
char* result = arr1;
while(*arr1++ = *arr2++)
{
;
}
return result; /*直接返回arr1地址*/
}
int main()
{
char arr1[] = "#################";
char arr2[] = "123**";
printf("%s", my_strcpy(arr1, arr2));/*进行链式访问,减少了引起变量*/
return 0;
}
うーん???ポインター、主張、他人による誤解、私自身による誤解、連鎖訪問...私は行った、私は宝物を見つけた、このプログラムは10ポイントです、若い男、すぐに来てください...インタビューなし、ただ仕事。 ..
誠意をこめて、それはついに終わりました...成功しました