あなたが時間を戻す能力を持っていると仮定して、あなたはこのインタビューの質問をどのように行うことを選択しますか??あなたのコーディングスキルをテストしてください

関数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ポイントです、若い男、すぐに来てください...インタビューなし、ただ仕事。 ..

誠意をこめて、それはついに終わりました...成功しました

おすすめ

転載: blog.csdn.net/m0_51723227/article/details/115226712