【C言語】文字列関数のシミュレーション実装(1)

文字列関数シミュレーションの実装

strlenの導入と実装

strlenこの機能は文字列の長さを見つけることです。文字列の終了マークは であるため'\0'前に出現した文字数がstrlenカウントされます。'\0'さらに、strlen関数の戻り値の型がsize_t型、つまり符号なし整数であることにも注意する必要があります。次のコードを見てみましょう。

#include<stdio.h>
#include<string.h>

int main()
{
    
    
     if(strlen("abc") - strlen("abcdef") > 0)
         printf(">\n");
     else
         printf("<=\n");
     return 0;
}

このコード部分を見ると、必ず3 - 6 < 0画面に表示されるだろうと言う人がいるでしょう<=が、実際には表示されます>strlen符号なし数値が返されるため、2 つの符号なし数値の減算の結果の型もsize_tクラスの符号なし数値である必要があります。したがって、2 つの数値を減算した結果は-3、0 より大きい符号なしの数値として扱われます。
ここに画像の説明を挿入します

ここに画像の説明を挿入します
要約すると、strlen関数をシミュレーションして実装するときは、次の点に注意する必要があります。

  1. 文字列の長さを正しく取得するには、文字列に次のものが含まれている必要があります。'\0'
  2. 注意すべきstrlen戻り値の型は次のとおりですsize_t

方法 1:

#include<stdio.h>

size_t my_strlen(const char* str)
{
    
    
     size_t count=0; //计数器,统计字符串长度
     assert(str != NULL);
     while(*str != '\0')
     {
    
    
          count++;
          str++;
     }
     return count;
}
int main()
{
    
    
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法 2:
ポインタ - ポインタ -----> アドレス - アドレス: 取得するのは、ポインタとポインタの間の要素の数です。

#include<stdio.h>

size_t my_strlen(const char* str)
{
    
    
     assert(p != NULL);
     char* cur=str;
     while(*cur != '\0')
     {
    
    
          cur++;
     }
     return cur - str;
}
int main()
{
    
    
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法 3:
再帰的 (一時変数は作成されません)

#include<stdio.h>

size_t my_strlen(const char* str)
{
    
    
     if(*str != '\0')
         return 1+my_strlen(str+1);
     else
         return 0;
}
int main()
{
    
    
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

strcpyの導入と実装

strcpy関数はある文字列を別の文字列にコピーする関数、文字列をコピーすると、文字列の終了マーク'\0'もコピーされます。ここで参照するのdestinationはターゲット文字列、つまり文字列をコピーする先の文字列です。sourceこれはソース文字列、つまりコピーする必要がある文字列を指します。このソース文字は変更する必要がないため、constエラーを避けるために変更を使用します。
この関数の戻り値は、char*コピーされた文字列を指すポインターです。
ここに画像の説明を挿入します
上記の紹介を通じて、strcpy機能をシミュレートおよび実装する際には次の点に注意する必要があります。

  1. ソース文字列を含める必要があり'\0''\0'コピー先スペースにもコピーされます。
  2. ターゲット領域が、コピーされたデータを保持するのに十分な大きさであることを確認してください。
  3. ターゲットスペースが変更可能であることを確認してください
    ここに画像の説明を挿入します
#include<stdio.h>
#include<assert.h> 

void my_strcpy(char* dest,const char* src)
{
    
    
    assert(dest && src);
    while(*dest++ = *src++)
    {
    
    
        ;
    }
}
int main()
{
    
    
    char arr1[]="abcdef";
    char arr2[20]={
    
    0};
    my_strcpy(arr1,arr2);
    return 0;
}

おすすめ

転載: blog.csdn.net/2301_77404033/article/details/132722989