もしあなたが逆流能力があるとしたら、あなたはどのようにこの面接問題をしますか?あなたのコード能力を試す

19676 ワード

関数strcpy()の役割(1つの文字列に'0'を含むすべてを別の文字列にコピーして上書きする)は知っていますが、今は面接官がいて、自分で関数を書くように要求しています.この関数の役割はstrcpyとそっくりです.
*strcpy()**関数を使用するコード
#include 
#include 
int main()
{
    char arr1[]="#################";
    char arr2[]="123**";
    strcpy(arr1,arr2);
    ptintf("%s",arr1);
    return 0;
}

面接官はあなたのコードを要求します.
#include 
void my_strcpy(char arr1[], char arr2[])
{
	while (1)
	{
		if (arr2[i] != '\0')
			arr1[i] = arr2[i];
		else if (arr2[i] == '\0')
		{
			arr1[i] = arr2[i];
			break;
		}
	}
}
int main()
{
	char arr1[] = "#################";
	char arr2[] = "123**";
	my_strcpy(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

いいやつ???ここまでで終わりだと思ったのか???本当にこんなに简単ですか???普通のサイクルで终わったの???肝っ玉は大きいですね.
それから面接官はあなたに教えて、もし10点ならば、あなたは4点しか得られなくて、あなたのプログラムの能力はだめです...
よし、逆流する時間があるから、戻って最適化を考えて、カウントダウンを始めて、3 2 1 0
最適化されたコード:
#include 
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 
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 
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点をあげて、考えたのはやはりとても悪くなくて、うん...あなたはあなたのコードを最適化することができますか?
ええと...本当にこれで最適化できるのかなと思います.私を游んでいるのではないでしょうか.こんなに何度も最適化して、一度に一回よりいいですが、いったいどうすればいいのでしょうか.今回は空ポインタを避けたためと判断したのですが、次回は??あ~、わかりました.これではあまり問題ありませんが、エラーは提示されません.arr 1が見えません.コピーされていなければ何が原因ですか.
さあ、時は流れて...
今回のコード:
#include 
#include 
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点をあげて、しかし1つの問題があって、最適化することができますか?
なに???さらに最適化???こんなことになったのに、最適化できますか??考えてみれば...
どうやって最適化できますか?さっきは他の人の間違いを避けていたのに、自分の間違いを避ける必要があるのではないでしょうか.あれ?分かったみたい...時間が逆流...
#include 
#include 
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 
#include 
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分、若者、早く来て、早く来て...面接しなくても、直接仕事をしましょう...
これでやっと一段落…成功した