IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 任务二----<string.h>8个函数的自实现 -> 正文阅读

[C++知识库]任务二----<string.h>8个函数的自实现

1,strlen

统计字符串的长度但不包括'\0'

int my_strlen(char s[])
{
  int i,len=0;
  for(i=0;s[i]!='\0';i++)
     len++;
  return len;
}

2,strcmp

两个字符串比较大小s1大于等于小于s2分别输出1,0,-1

int my_strcmp(char s1[],char s2[])
{
  int i;
  for(i=0;;i++)
   {  if(s1[i]>s2[i])
         return 1;
      if(s1[i]<s2[i])
         return -1;
      if(s1[i]!='\0'&&s2[i]=='\0')
         return 1;
	  if(s1[i]=='\0'&&s2[i]!='\0')
         return -1;
      if(s1[i]=='\0'&&s2[i]=='\0')
         return 0;
   }
}

3,strcpy

将字符串s2的内容复制给s1,s1的长度要大于等于s2;

void my_strcpy(char *p1,char *p2)
{
  
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  *p1='\0';    
}

样例

#include<stdio.h>
void my_strcpy(char *p1,char *p2)
{
  
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  *p1='\0';    
}


int main() 

{
   
   char s1[1000],s2[1000],*p1=s1,*p2=s2;
   gets(s1);
   gets(s2);
   my_strcpy(p1,p2);
   printf("%s",s1); 
     
   return 0;
}
/*
样例一 
输入	
hello!
hi
输出
hi
*/

4,strcat

用来连接字符串

void strcat(char *p1,char *p2)
{
  int len;
  len=strlen(p1);
  p1=p1+len;
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  p1='\0';   
}

样例(存在部分是可以正确执行部分不能正确执行的问题)

#include<stdio.h>
#include<string.h>
void strcat(char *p1,char *p2)
{
  int len;
  len=strlen(p1);
  p1=p1+len;
  for(;*p2!='\0';p1++,p2++)
  {
  *p1=*p2;
  }
  p1='\0';   
}


int main() 

{
   
   char s1[1000],s2[1000],*p1=s1,*p2=s2;
   gets(s1);
   gets(s2);
   strcat(p1,p2);
   printf("%s",s1); 
     
   return 0;
}
/*
样例一 
输入	
hello!
hi
输出
hello!hi?b
样例二 
输入	
hello
hi
输出
hellohi
*/

正确实现




void my_strcpy(char *p, char *q)
{
    while (*p!='\0')
	    p++;
    
    while (*p++ = *q++);
}

样例

#include<stdio.h>


void my_strcpy(char *p, char *q)
{
    while (*p!='\0')
	    p++;
    
    while (*p++ = *q++);
}

int main()
{
    char s1[100];
    char s2[100];
    gets(s1);
    gets(s2);
    my_strcpy(s1,s2);
    printf("%s",s1);

    return 0;
}
/*
样例一 
输入	
hello!
hi
输出
hello!hi
样例二 
输入	
hello
hi
输出
hellohi
*/

5,strchr

C语言strchr函数

char *strchr(const char *str, int c)

功能:在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。

返回值:返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。

#include <stdio.h>
#define M 100
char *search(char *, char);
int main(void)
{ char str[M],ch,*p;
printf("请输入一个字符串:");
gets(str);
printf("请输入要查找的字符:");
ch=getchar();
p=search(str,ch);
puts(p);
return 0;
}
char *search(char *s, char c)
{   while(*s)//*s=='\0'结束 
	{
	if(*s==c) return s;
	s++;
	}
	return NULL;
}

结果

请输入一个字符串:hello
请输入要查找的字符:l
llo

6,strstr

char *my_strstr(char *s1, char *s2)

功能:检索字串在字符串中首次出现的位置并返回

返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL

举例

#include <stdio.h>
#define M 100
 char * my_strstr(char *str1, char *str2)
{
    
    while (str1 != '\0')
    {
        char *p = str1;
        char *q = str2;
        char * res = NULL;
        if (*p == *q)
        {
            res = p;
            while (*p && *q && *p++ == *q++)
            {
                ;
            }
            if (*q == '\0')
                return res;
        }
        str1++;
    }
    return NULL;
}

int main(void)
{ char str[M],ch[M],*p;
printf("请输入一个字符串:");
gets(str);
printf("请输入要查找的字符串:");
gets(ch);
p= my_strstr(str,ch);
puts(p);
return 0;
}

结果

请输入一个字符串:hello world
请输入要查找的字符串:wo
world

7,strncmp

int strncmp(const char *str1, const char *str2, int?n)

与strcmp相似,不过比较范围缩小到前n个字符

int my_strncmp(char s1[],char s2[],int n)
{
  int i;
  for(i=0;i<n;i++)
   {  if(s1[i]>s2[i])
         return 1;
      if(s1[i]<s2[i])
         return -1; 
   }
   return 0;
}

8,strncpy

char *strncpy(char *destinin, char *source, int maxlen)

与strcpy相似,不过比较范围缩小到前n个字符

void my_strcpy(char *p1,char *p2,int n)
{
  int i;
  for(i=0;i<n;p1++,p2++,i++)
  {
  *p1=*p2;
  }
  *p1='\0';    
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:37:21  更:2021-12-13 12:38:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:42:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码