不受限字符串函数功能的实现

1、字符串长度函数原型:

size_t strlen(char const *string);

strlen()计算的长度不包括‘\0‘。

strlen返回的值是一个无符号的整型,所以像if(strlen(x)-strlen(y)>=0)的结果是绝对为真的,将达不到你想要的结果。

计算字符串长度的实现:

#include<stdio.h>
#include<stdlib.h>
int my_strlen(char *p)
{
                 int count = 0;
                 while(*p != ‘\0‘)
                 {
                         count++;
                         p++;
                 }
                 return count;
}
int main()
{
                 char arr[100];
                 scanf( "%s", arr);
                 int  ret = my_strlen(arr);
                 printf( "%d\n", ret);
                 system( "pause");
                 return 0;
}

2、字符串复制函数原型:

char *strcpy(char *dst,char const *src);

strcpy()函数是将参数src字符串中的字符复制到参数dst中,当参数dst和参数src内存出现重叠时,其结果是未定义的。

注意:

1、strcpy()遇见‘\0‘才停下,所以当参数src字符串长度大于参数dst字符串时,多余的字符会将参数dst字符串后面的内存空间覆盖掉,这时非常危险的。

2、当src中字符串比dst中的短时,由于strcpy()会将src中的‘\0‘,复制过去,所以新字符串后面的老字符串会被删除掉。

char arr[]="hello world";

strcpy(arr,welcome);

w e l c o m e 0 r l

d 0

如表,新字符串遇见‘\0‘停下,后面的字符就相当于被删除了。

字符串复制“功能”的实现:

#include<stdio.h>
#include<stdlib.h>
void my_strcpy(char *p1, char *p2)
{
                 while (*p2 != ‘\0‘)
                {
                                * p1 = *p2 ;
                                 p1++;
                                 p2++;
                }
                * p1 = ‘\0‘ ;
}
int main()
{
                 char arr1[100];
                 char arr2[50];
                 scanf( "%s", arr1);
                 scanf( "%s", arr2);
                 my_strcpy(arr1, arr2);
                 printf( "%s\n", arr1);
                 system( "pause");
                 return 0;
}

3、字符串连接函数原型:

char *strcat(char *dst,char *src);

strcat()函数是将src中的字符串连接在dst中的字符串后面,如果src与dst位置发生重叠,其结果也是未定义的。

注意:在使用strcat()函数时,必须要考虑dst数组中除过原字符串之后剩下的空间能否容纳下src。

字符串连接“功能”的实现:

#include<stdio.h>
#include<stdlib.h>
void my_strcat(char *p1, char *p2)
{
                 while (*p1 )
                {
                                 p1++;
                }
                 while (*p2 )
                {
                                * p1 = *p2 ;
                                 p1++;
                                 p2++;
                }
                * p1 = ‘\0‘ ;
}
int main()
{
                 char arr1[100];
                 char arr2[50];
                scanf( "%s%s", arr1, arr2);
                my_strcat(arr1, arr2);
                printf( "%s\n", arr1);
                system( "pause");
                 return 0;
}

4、字符串比较函数原型:

int strcmp(char const *s1,char const *s2);

字符串比较的是ASCII的值,对两个字符串中的字符逐个比较,发现第一个不匹配的字符,如果s1中的ASCII大于s2中的,则返回一个大于零的数,如果小于,则返回一个小于零的数。如果s1中字符串比s2中短,则返回一个小于零的数。

如果一直匹配,直到‘\0’,两个字符串就相等,则返回0。

字符串比较“功能”的实现:

#include<stdio.h>
#include<stdlib.h>
int my_strcmp(char *p1, char *p2)
{
       if (*p1 == *p2)
       {
            while (*p1 == *p2)
            {
                if (*p2 == ‘\0‘)
                   return 0;
                 p1++;
                 p2++;
             }
            if (*p1 > *p2)
                return 1;
            else
                return -1;
      }
}
int main()
{
     char arr1[100];
     char arr2[100];
     scanf( "%s%s", arr1, arr2);
     int ret = my_strcmp(arr1,arr2);
     printf( "%d\n", ret);
     system( "pause");
     return 0;
}

5、查找一个字符函数原型:

char *strchr(char const *str,int ch);

char *strrchr(char const *str,int ch);

strchr()是查找第一次出现的位置,strrchr()是查找最后一次出现的位置。如果找到就返回一个指向这个位置的指针,如果没找到就返回NULL。

查找一个字符第一次出现“功能”的实现:

#include<stdio.h>
#include<stdlib.h>
char *my_strchr(char *p, char chr)
{
       while (*p )
      {
            if (*p == chr)
               return p ;
             p++;
      }
      return NULL ;
}
int main()
{
     char arr[100];
     char chr;
     printf( "输入被查找使我字符\n" );
     scanf( "%c", &chr);
     printf( "输入查找的字符串\n" );
     scanf( "%s",arr);
     char *ret=my_strchr(arr, chr);
     printf( "%s\n", ret);
     system( "pause");
     return 0;
}

“查找一个字符最后一次出现”功能的实现:

#include<stdio.h>
#include<stdlib.h>
char *my_strrchr(char *p, char chr)
{
   char *p2 = NULL ;
   while (*p )
     {
          if (*p == chr)
           p2 = p;
          p++;
     }
   return p2;
}
int main()
{
    char arr[100];
    char chr;
    printf( "输入被查找的字符\n" );
    scanf( "%c", &chr);
    printf( "输入查找的字符串\n" );
    scanf( "%s", arr);
    char *ret = my_strrchr(arr, chr);
    printf( "%s\n", ret);
    system( "pause");
    return 0;
}

6、查找一个字符串是否是另一个字符串的子串原型:

char *strstr(char const *s1,char const *s2);

这个函数在s1中查找整个s2在s1第一次出现的位置,如果找到 则返回这个地址,如果没有找到,则返回NULL,如果s2为空字符串,则返回s1。

查找一个字串“功能”的实现:

#include<stdio.h>
#include<stdlib.h>
char *my_strstr(char *p1, char *p2)
{
     if (*p2 == NULL)
         return p1 ;
     while (*p1 )
     {
        if (*p1 == *p2)
        {
             char *p3 = p1 ;
             char *p4 = p2 ;
             while (*p3 == *p4)
             {
                 if (*p4 == ‘\0‘ )
                   return p1 ;
                  p3++;
                  p4++;
              }
             if (*p4 == ‘\0‘ )
                return p1 ;
        }
        p1++;
     }
    return NULL ;
}
int main()
{
    char arr1[100];
    char arr2[100];
    scanf( "%s%s", arr1, arr2);
    int  ret = my_strstr(arr1, arr2);
    printf( "%d\n", ret);
    system( "pause");
    return 0;
}
时间: 2024-12-17 13:19:59

不受限字符串函数功能的实现的相关文章

长度受限的字符串函数及其他字符串函数

长度受限的字符串函数:这下函数接受一个显示的长度做参数,用于限定比较或复制的字符数,防止一些长字符串从目标数组中溢出. 三中常见的受限字符串函数: char * strncpy(char *dst,char const *src,size_t len); strncpy从src中复制len个字符到dst中,如果strlen(src)的长度小于len,则多出来的字符用NUL填补,注意,当strlen(src)大于或者等于len,strncpy不会以NUL结尾,所以使用strncpy时要慎重考虑.

前端自定义format函数,做字符串格式化功能

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义format函数,做字符串格式化功能</title> </head> <body> <script> String.prototype.format = function (kwargs) { //自定义定义form

mssql 系统函数 字符串函数 space 功能简介

转自: http://www.maomao365.com/?p=4672  一.space 函数功能简介 space功能:返回指定数量的空格参数简介: 参数1: 指定数量,参数需为int类型 注意事项: 1 如果参数1输入为非varchar或nvarchar类型,那么sql引擎先进行类型转换,如果转换失败,则返回错误信息 否则继续执行此函数 2 如果参数等于零的数值,那么就返回空字符串 3 如果参数小于零,那么就返回null ,会导致字符串叠加操作失败  二.space 函数举例说明例1: /*

mysql学习笔记(五)--- 字符串函数、日期时间函数

一.常见字符串函数: 1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左.取右 6.LENGTH   获取长度(字节为单位) 7.LTRIM/RTRIM/TRIM 去空格(左/右/自定义) 8.STRCMP  字符串比较 9.CONCAT  字符串拼接 10.SUBSTRING  字符串截取 1.CHAR_LENGTH:获取长度(字符为单位) CHAR_LENGTH()

前端学PHP之字符串函数

前面的话 字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的.信息的分类.解析.存储和显示,以及网络中的数据都需要操作字符串来完成.尤其在web开发中更为重要,程序员大部分工作都是在操作字符串,本文将详细介绍php中的字符串函数 [注意]关于javascript中字符串的属性和方法移步至此 特点 因为php是弱类型语言,所以其他类型的数据一般都可以直接应用于字符串操作函数中,而自己转换成字符串类型进行处理 echo substr( "1234567", 2, 4

MySQL字符串函数、日期时间函数

MySQL字符串函数.日期时间函数 一.常见字符串函数: 1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左.取右 6.LENGTH   获取长度(字节为单位) 7.LTRIM/RTRIM/TRIM 去空格(左/右/自定义) 8.STRCMP  字符串比较 9.CONCAT  字符串拼接 10.SUBSTRING  字符串截取 1.CHAR_LENGTH:获取长度(字符

(转)驱动开发中使用安全字符串函数

参考链接:http://www.cppblog.com/aurain/archive/2009/09/27/97363.html 一.前言 大量的系统安全问题是由于薄弱的缓冲处理以及由此产生的缓冲区溢出造成的,而薄弱的缓冲区处理常常与字符串操作相关.c/c++语言运行库提供的标准字符串操作函数(strcpy, strcat, sprintf等)不能阻止在超出字符串尾端的写入. 基于Windows XP SP1以及随后的操作系统的Windows DDK版本提供了安全字符串函数(safe strin

11-02C#基础--数据库之字符串函数

数据库の函数 一.内置函数--字符串函数 1.--ASCII 返回字符串的首字母的ASCII编码 select ASCII('ame') select ASCII(xingming)from xuesheng--查询语句中的格式 select*from haha where ASCII(name)>200--查询表中ASCII码大于 2.--CHAE 将ASCII码转换成对应的字符 select CHAR(13)--在ASCII码中代表回车键,显示空格 select CHAR(202)--不同于

C语言字符串函数大全

转载自http://www.360doc.com/content/08/0723/22/26860_1462024.shtml# 函数名: stpcpy 功能: 拷贝一个字符串到另一个 用法: char *stpcpy(char *destin, char *source); 程序例: #include<stdio.h> #include<string.h> int main(void) { char string[10]; char *str1 = "abcdefghi