[c/c++] programming之路(23)、字符串(四)——strncat,atoi,strcmp,strlen等,以及常用内存函数

一、strncat及自行封装实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>    //<string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。
                    //<cstring>是C++版本的<string.h>
                    //<string>定义了一个string的字符串类,包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。
                    //但<string>又包含了老的C版本的字符串操作如strcpy、strcat等

void main() {
    char str[30] = "yincheng";
    char str1[20] = "8848.88";
    strncat(str, str1, 4);//从str1中拷贝4个字节到str
    printf("%s\n", str);
    system("pause");
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void mystrncat(char *bc, char *c, int length)
{
    if (bc == NULL || c == NULL || length == 0)
        return;
    char *p = bc;
    while (*p)
        p++;
    //循环结束后,p指向了字符串的末端‘\0‘
    for (int i = 0; i < length; i++)
    {
        *p = c[i];
        p++;
    }
    *p = ‘\0‘;
}

void main() {
    char str[30] = "task";
    char str1[20] = "list8848.88";
    mystrncat(str, str1, 4);
    printf("%s\n", str);
    system(str);
    system("pause");
}

二、atoi

#include<stdio.h>
#include<stdlib.h>

void main() {
    char str[10] = "88e48";
    //int num = atoi(str);//8848
    //int num = atoi(str+1);//848
    int num = atoi(str);//8848

    char s1[10] = "88e48";
    //int n1 = atoi(s1);//88
    int n1 = atoi(s1+3);//48

    char s2[10] = "e8848";
    //int n2 = atoi(s2);//0
    int n2 = atoi(s2 + 1);//8848

    printf("%d\n", n2);
    system("pause");
}

三、strrev(字符串逆转)

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

void mystrrev(char *p) {
    int length = strlen(p);//获取字符串长度
    for (int i = 0; i < length/2; i++)//length必须除以2,不然字符对调之后又调回去了
    {
        char temp = p[i];
        p[i] = p[length - 1 - i];
        p[length - 1 - i] = temp;
    }
}

void main() {
    char str[20] = "yincheng8848a";
    printf("原来字符串 %s\n", str);
    //_strrev(str);
    mystrrev(str);
    printf("后来字符串 %s\n", str);
    system("pause");
}

四、strupr和strlwr(大小写转换)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void tobig(char *p) {
    while (*p)
    {
        if ((*p)>= ‘a‘&&(*p) <= ‘z‘)
            *p -= 32;
        p++;
    }
}

void main() {
    char str[20] = "notepad";
    //_strupr(str);//小写转大写
    //toupper用法;    #include<cctype>    ch = toupper(ch);//ch是一个字符
    tobig(str);
    printf("%s\n", str);

    char str1[20] = "TASKLIST";
    _strlwr(str1);//大写转小写
    printf("%s\n", str1);

    system("pause");
}

五、strlen

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

int mystrlen(char *p) {
    int i = 0;
    while (*p) {
        i++;
        p++;
    }
    return i;
}

void main() {
    char str[100] = "i love iphone";//str是变量
    char *p = "i love china";//常量
    int len1 = strlen(str);
    int len2 = mystrlen(p);    

    printf("str=%d,p=%d\n",len1,len2);

    system("pause");
}

六、strcat(字符串拼接)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char * mystrcpy(char *dst,char *src) {
    char *p = dst;
    if (dst == NULL || src == NULL)
        return NULL;
    while (*src) {
        *dst = *src;
        dst++;
        src++;
    }
    *dst = ‘\0‘;
    return p;
}

char * mystrcat(char *dst, char *src) {
    char *p = dst;
    if (dst == NULL || src == NULL)
        return NULL;
    while (*dst)
        dst++;
    while (*src) {
        *dst = *src;
        dst++;
        src++;
    }
    *dst = ‘\0‘;
    return p;
}

void main() {
    char str1[10] = "note";
    char str2[10] = "pad";
    char str[20];
    printf("%s\n", mystrcpy(str, str1));
    //mystrcpy(str, str1);//复制
    printf("%s\n", str);
    //strcat(str, str2);//拼接
    mystrcat(str, str2);//拼接
    printf("%s\n", str);
    system(str);
}

void main0() {
    char str1[10] = "note";
    char str2[10] = "pad";
    char str[20];
    sprintf(str, "%s%s", str1, str2);
    system(str);
    system("pause");
}

七、strchr(查找某字符是否在字符串中)

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

char * mystrchr(char *dst,char ch) {
    if (dst == NULL)
        return NULL;
    while (*dst) {
        if (*dst == ch)
            return dst;
        dst++;
    }
    return NULL;
}

void main() {
    char str[20] = "i love china";
    char ch=‘o‘;
    /*char *p = strchr(str, ch);*/
    char *p = mystrchr(str, ch);
    if(p==NULL)
        printf("没找到\n");
    else
        printf("值%c,地址%x\n",*p,p);

    system("pause");
}

八、strcmp(比较两字符串是否相等)

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

int mystrcmp(char *p1,char *p2) {
    int l1 = strlen(p1);
    int l2 = strlen(p2);
    if (l1 != l2)
        return -1;
    else {
        for (;*p1;p1++,p2++)
        {
            if (*p1 != *p2)
                return -1;
        }
    }
    return 0;
}

void main() {
    char str1[10] = "note";
    char str2[10] = "note";
    /*if (strcmp(str1,str2)==0)*/
    if (mystrcmp(str1, str2) == 0)
        printf("相等\n");
    else
        printf("不相等\n");
    system("pause");
}

void main0() {//无论相等还是不等,都输出不等
    char str1[10] = "note";
    char str2[10] = "note";
    if(str1==str2)//c语言判断字符串不能这样
        printf("相等\n");
    else
        printf("不相等\n");
    system("pause");
}

八、strstr(在字符串中查找是否包含另一个字符串)

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

char * mystrstr(char *allstr,char *str) {
    if (allstr == NULL || str == NULL)
        return NULL;
    int all_len = strlen(allstr);
    int str_len = strlen(str);
    for (int i = 0; i <all_len-str_len+1; i++)
    {
        int flag = 1;//标示,假定字符串一开始相等
        for (int j = 0; j <str_len; j++)
        {
            if (allstr[i + j] != str[j]) {
                flag = 0;
                break;
            }
        }
        if (flag)
            return allstr+i; //返回找到的地址
    }
    return NULL;
}

void main() {
    char allstr[40] = "i love china i love cpp";
    char str[10] = "china";
    //char *p = strstr(allstr, str);//检索
    char *p = mystrstr(allstr, str);//检索
    if(p==NULL)
        printf("没找到\n");
    else
        printf("值%c,地址%x\n",*p,p);
    system("pause");
}

九、常用内存函数

1.memset

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<memory.h>//内存操作函数

void main() {
    char str[40] = "i love china i love c i love cpp";
    //第一个参数是内存的首地址,第二个参数是要设置的字符
    //第三个参数是整数,从首地址开始前进多少字节,把这一段设置为该字符
    memset(str, ‘A‘, 10);
    printf("%s\n",str);
    memset(str, ‘A‘, 12);
    printf("%s\n", str);
    memset(str, ‘\0‘,strlen(str));//清空字符串
    printf("%s\n", str);
    system("pause");
}

2.memcpy

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<memory.h>//内存操作函数

void main0() {
    char str[30] = "yincheng8848";
    char str1[20] = "hello c";
    printf("%s\n", str);
    //memcpy:从地址str开始,从str1处拷贝5个字节到str
    memcpy(str,str1,5);
    printf("%s\n",str);

    system("pause");
}

void main() {
    int a[] = { 1,3,5,7,9 };
    int b[] = { 0,2,4,6,8 };
    memcpy(a,b, 8);//每个元素4个字节,两个元素8个字节
    //memcpy按照内存字节来拷贝,不管是什么类型,都是拷贝二进制类型
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n",a[i]);
    }
    system("pause");
}

3.memccpy

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<memory.h>//内存操作函数

void main() {
    char str[30] = "yincheng8848";
    char str1[20] = "hello c";
    printf("%s\n", str);
    _memccpy(str,str1,‘l‘,7);
    //memccpy:如果str1没有字符‘l’,就等价于memcpy,读取7个字符拷贝到str
    //如果有,读取拷贝到该字符就停止
    printf("%s\n",str);

    system("pause");
}

4.memchr

#include<stdio.h>
#include<memory.h>

void main() {
    char str[30] = "helloyincheng";
    char ch=‘c‘;
    char *p =(char *) memchr(str, ‘c‘, 30);
    //从地址str开始,前进30个字节检索
    //如果存在,返回地址,否则返回空
    if (p == NULL)
        printf("没找到\n");
    else
        printf("找到字符%c,地址%p", *p, p);
    getchar();
}

5.memicmp

#include<stdio.h>
#include<stdlib.h>
#include<memory.h>

void main() {
    char *buf1 = "ABCDE123";
    char *buf2 = "abcde456";
    int num = _memicmp(buf1, buf2, 5);
    //memicmp判断字符串前面几个字节是否相等
    //忽略大小写,相等返回0,反之非0
    if (num == 0)
        printf("忽略大小写的情况下,相等");
    else
        printf("不等");

    getchar();
}

时间: 2024-12-23 03:24:15

[c/c++] programming之路(23)、字符串(四)——strncat,atoi,strcmp,strlen等,以及常用内存函数的相关文章

字符串基本操作以及内存函数

/* ============================================================================ Name : TestString.c Author : lf Version : Copyright : Your copyright notice Description : C语言字符串相关操作以及内存函数 1 在Java中有String数据类型,但是在C语言中没有 2 在C语言中一般用字符数组来表示字符串,因为在C中没有Strin

小白学习之路,基础四(函数的进阶)

一,内置函数 前面已经认识了函数,对函数都有所了解了,其实呢,在Python中提供了很多内置的函数方便给我们调用.下面会给大家提到一些常用的常用内置函数的用法,当然还有一些其他没讲到的,你也可以看参考文档,深入学习一波.咳咳咳,不多说了,直接进入装逼的代码环节. 更多的内置函数详情请参考http://www.runoob.com/python3/python3-built-in-functions.html 1 abs(-3) #取绝对值 2 all([1,2,5,0]) #当全部为真或者全部不

全栈JavaScript之路(十四)HTML5 中与class属性相关的扩充

1. getElementByClassName() :支持getElementsByClassName()方法的浏览器有IE 9+.Firefox 3+.Safari 3.1+.Chrome 和 Opera 9.5+. 2. classList 属性 :  classList 属性是新集合类型 DOMTokenList  的实例.DOMTokenList 类型有一个lenght 属性 ,表示包含了多少子元素,要取得每一个元素可以通过item() 方法访问,也可以用 [ ] 方法 访问. 此外这

Python学习之路13——字符串2

1只适用与字符串的操作符 1.1格式化操作符(%) Python风格的字符串格式操作符.只适用与字符串类型,非常类似于C语言中的printf()函数的字符串格式化,都是用%,并且支持所有的printf()的格式化操作. 字符串格式化符合如下: %c                     转换成字符(ASCII码值,或者长度为一的字符串)  %r                     优先用repr()函数进行字符串转换  %s                     优先用str()函数进行

四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName

我以前查一段时间范围内的数据都是在程序里计算好日期再掉查询语句,现在我用下面的函数.SQL SERVER没有查一季度数据的函数. DateDiff函数: 描述 返回两个日期之间的时间间隔. 语法 DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) DateDiff 函数的语法有以下参数: 参数 描述 interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

strlen、ord、substr函数——获取长度、ASCII码及部分字符串

strlen函数 语法:strlen(string) 定义和用法:strlen() 函数返回字符串的长度. substr函数 语法:substr(string,start,length) 定义和用法:substr() 函数返回字符串的一部分. 参数描述 string:必需.规定要返回其中一部分的字符串. start:必需.规定在字符串的何处开始.正数,在字符串的指定位置开始:负数,在从字符串结尾的指定位置开始:0,在字符串中的第一个字符处开始. charlist:可选.规定要返回的字符串长度.默

第四篇(1):企业常用Linux web环境安装配置(apache、php、mysql)

上篇我们讲了基本的软件包管理和文件操作什么的,现在也要动手安装点有用的东西了吧! 本篇我会写出一个用yum安装apache.php.mysql的方法,最后再运行phpMyAdmin来管理数据库. 1.如何在Linux主机上安装apache 由于之前我们安装了完成的centos系统,所以可能系统有可能已经安装好了apache,所以我们先检查下是不是真的安装过了 先敲命令吧,yum list installed httpd* ,如果看到httpd已经安装,那么就yum -y remove httpd

用2种内存模型来排序字符串的的顺序,一种是交换内存地址,第二种是交换内存里面的值;

#define _CRT_SECURE_NO_WARNINGS #include"stdio.h" #include"stdlib.h" #include"string.h" void MyPrintf(char **); void MYSORT(char **, int); void SORTBUF(char **); void main() { int i = 0; int j = 0; char *buf; char **myarray;