国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 一篇文章教你用C語言模擬實現字符串函數

一篇文章教你用C語言模擬實現字符串函數

2022-01-12 14:00HQK666999 C/C++

這篇文章主要介紹了C語言模擬實現字符串函數,開發程序的時候經常使用到一些字符串函數,例如求字符串長度,拷貝字符串……,需要的朋友可以參考下

前言

編程過程中經常會使用到一些字符串函數,這些字符串函數都在C語言標準庫中,我們可以直接使用。但我們也要了解一下它們是如何實現的。

 

模擬

1.strlen 函數

strlen函數是用來求字符串長度的。官方給出的解釋如圖

一篇文章教你用C語言模擬實現字符串函數

返回值類型是無符號整型,參數類型是char*,遇見\0停止。

strlen的模擬實現有三種方法,1、count計數。2、遞歸。3、指針減指針。

count計數

#include <stdio.h>
int my_strlen(const char* str) {
	int count = 0;
	while (*str++) {
		count++;
	}
	return count;
}
int main() {
	char str[] = "abcdefg";
	int len = my_strlen(str);
	printf("%d", len);
	return 0;
}

遞歸

#include <stdio.h>
int my_strlen( const char* str) {
	if (*str == '\0') {
		return 0;
	}
	else {
		return my_strlen(++str) + 1;
	}
}
int main() {
	char str[] = "abcdefg";
	int len = my_strlen(str);
	printf("%d", len);
	return 0;
}

指針減指針

#include <stdio.h>
int my_strlen(const char* str) {
	char* p = str;
	while (*p) {
		p++;
	}
	return p - str;
}
int main() {
	char str[] = "abcdefg";
	int len=my_strlen(str);
	printf("%d", len);
	return 0;
}

 

2.strcpy 函數

strcpy函數是字符串拷貝函數。就是把源地址字符串拷貝到目的地址去。源地址字符串必須有\0。目的地址必須足夠大。源地址字符串的\0也會拷貝過去,返回目的地址的地址。

官方解釋如圖

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
char* my_strcpy(char* dest,const char* sour) {
  char* p=dest;
	while (*dest++ = *sour++) {
		;
	}
  return p;
}
int main() {
	char sur[] = "abcdefg";
	char dest[10] = { 0 };
	printf("%s", my_strcpy(dest,sur));
	return 0;
}

 

3.strcat 函數

strcat函數是字符串追加函數。就是把源地址字符串追加到目的地址后邊。要注意的是當遇見源地址的\0時停止,目的地址必須可修改,且足夠大。strcat函數不能用于追加字符串自己,會越界,根本停不下來。

官方解釋如圖

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
char* my_strcat(char* str2,const char* str1) {
	char* p = str2;
	while (*str2++){
		;
	}
	str2--;
	while (*str2++ = *str1++) {
		;
	}
	return p;
}
int main() {
	char str1[] = "abcdefg";
	char str2[20]="abc";
	printf("%s", my_strcat(str2, str1));
	return 0;
}

 

4.strcmp函數

strcmp函數是字符串比較函數,如果str1比str2大就返回正值,str1比str2小返回負值。str1=str2比較下一對字符。只要有一個遇見\0就停止。

官方解釋如圖

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
int my_strcmp( const char* str1,const char* str2) {
	while (*str1++-*str2++==0 && *str1!='\0' && str2!='\0') {
		;
	}
	return *--str1 - *--str2;
}
int main() {
	char str1[] = "abcdefg";
	char str2[] = "bbcdef";
	int a=my_strcmp(str1,str2);
	printf("%d", a);
	return 0;
}

 

5.strncpy函數

strncpy函數是長度受限制的字符串拷貝函數,可以指定拷貝多少給字節,當給定的字節數大于要拷貝的字符串時,不夠的用\0補充。

官方解釋

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
char* my_strncpy(char* dest,const char* sour,int num) {
	char* p = dest;
	while (num--) {
		if (*sour != '\0') {
			*dest++ = *sour++;
		}
		else {
			*dest++ = '\0';
		}
	}
	return p;
}
int main() {
	char sur[] = "abcdefg";
	char dest[10] = { 0 };
	printf("%s", my_strncpy(dest, sur,10));
	return 0;
}

 

6.strncat函數

strncat函數,需要注意的一點是,字符串追加完成后目的地址斜杠零是追加完后自己補充的。所以它可以實現自己給自己 追加。

官方解釋

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
char* my_strncat(char* str2,const char* str1,size_t num) {
	char* p = str2;
	while (*str2++){
		;
	}
	str2--;
	while (num--) {
		if (*str1 != '\0') {
			*str2++ = *str1++;
		}
	}
	*str2 = '\0';
	return p;
}
int main() {
	char str1[] = "abcdefg";
	char str2[20]="abc";
	printf("%s", my_strncat(str2, str1,6));
	return 0;
}

 

7.strncmp函數

strncmp函數,比較字符串,和strcmp類似只是可以確定比較前幾個字符。

官方解釋

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
int my_strncmp( const char* str1,const char* str2,size_t num){
	while (num--&& *str1++-*str2++==0 && *str1!='\0'&& str2!='\0') {
		;
	}
	return (*--str1 - *--str2);
}
int main() {
	char str1[] = "abcdefg";
	char str2[] = "bbcdef";
	int a=my_strncmp(str1,str2,5);
	printf("%d", a);
	return 0;
}

 

8.strstr函數

strstr函數就是在一個字符串里找子字符串。

官方解釋

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <stdio.h>
const char* my_strstr(const char* str1, const char* str2) {
	while (*str1) {
		const char* p1 = str1;
		const char* p2 = str2;
		while (*p1++ == *p2++) {
			;
		}
		if (*--p2 == '\0') {
			break;
		}
		else {
			str1++;
		}
	}
	return str1;
}
int main() {
	char str1[] = "abbbcdefg";
	char str2[] = "bcde";
	int len = strlen(str2);
	const char* p = my_strstr(str1, str2);
	while (len--) {
		printf("%c", *p++);
	}
	return 0;
}

 

9.strtok函數

strtok函數是字符串切割函數,用的比較少也比較難懂。用的是時候要給一個用做分隔符的字符集合。strtok函數找到分隔符后將其置為0.返回一個指向該標記的指針。如果第一個參數不為空則strtok找到第一個分隔符將其置零并記錄該處地址,第二次調用strtok則傳一個NULL則strtok會從前一個'\0‘處往后找下一個分隔符。

官方解釋

一篇文章教你用C語言模擬實現字符串函數

模擬實現

#include <string.h> 
#include <stdio.h> 
char* my_strtok(char* str, char* demion)
{
  static char* p_last = NULL;
  if (str == NULL && (str = p_last) == NULL)
  {
      return NULL;
  }
  char* s = str;
  char* t = NULL;
  while (*s != '\0')
  {
      t = demion;
      while (*t != '\0')
      {
          if (*s == *t)
          {
              p_last = s + 1;
              if (s - str == NULL)
              {
                  str = p_last;
                  break;
              }
              *s = '\0';
              return str;
          }
          t++;
      }
      s++;
  }
  return NULL;
}
int main(void)
{
  char str[] = "liusen,lin,lll";
  char* result = NULL;
  result = my_strtok(str, ",");
  printf("%s\n", result);
  result = my_strtok(NULL, ",");
  printf("%s\n", result);
  return 0;
}

 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/weixin_47300000/article/details/120438903

延伸 · 閱讀

精彩推薦
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
主站蜘蛛池模板: 国产精一区 | 午夜小电影 | 欧美日韩一级电影 | 国产偷亚洲偷欧美偷精品 | 国产成人黄色片 | 一级黄色片日本 | 看片久久 | 亚洲精彩视频在线 | 欧美狠狠干 | 黄色免费毛片 | 欧美视频三区 | 亚洲国产精品一区二区三区 | 人人澡人人射 | 亚洲视频在线观看免费 | 黄视频在线观看免费 | 中文视频一区 | 亚洲午夜激情 | 91精品视频网 | av在线免费播放 | 亚洲区视频 | 成人在线看片 | 人人爽在线观看 | 在线不卡a资源高清 | 黄在线看| 天天综合久久 | 精品成人免费一区二区在线播放 | 日韩欧美一区二区三区免费观看 | 日韩成人在线视频 | 天天操人人干 | 少妇看av一二三区 | 亚洲精品综合 | 欧美影 | 日韩在线观看一区 | 中文字幕一区二区三 | 中文字幕一区在线观看视频 | 久久综合中文字幕 | 国产成人精品综合 | 亚洲国产成人一区二区精品区 | 成人午夜电影网 | 久久亚洲高清 | 免费看黄在线网站 |