string.h库的使用

说明:包涵C语言常用字符串处理函数

1.memchr

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original:  void *memchr(const void *str, int c, size_t n)
 * @description: C 库函数 void *memchr(const void *str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
 * @param {*}
 * @return {*} 该函数返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。
 */ 
int main()
{
    char str[100] = {0};
    cin.getline(str, 100);
    char c = '.';
    char* rst = (char*)memchr(str, c, 10);

    if (rst == nullptr) {
        return 0;
    }
    
    cout<<"after " << c <<" display:  "<< rst << endl;
    getchar();
    return 0;
}
// str:www.baidu.com rst:.baidu.com

2.memcmp

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: int memcmp(const void *str1, const void *str2, size_t n)
 * @description: C 库函数 int memcmp(const void *str1, const void *str2, size_t n)) 把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
 * @param {*} 
 * @return 如果返回值 < 0,则表示 str1 小于 str2。
 * @return 如果返回值 > 0,则表示 str1 大于 str2。
 * @return 如果返回值 = 0,则表示 str1 等于 str2。
 */ 
int main()
{
    char str1[100] = {0};
    char str2[100] = {0};
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    int rst = memcmp(str1, str2, sizeof(str1));
   
    cout << rst << endl;

    getchar();
    return 0;
}
// str1: 123 str2: 122 rst:1
// str1: 122 str2: 123 rst:-1
// str1: 122 str2: 122 rst: 0

3.memcpy

/**
 * @original: void *memcpy(const void *str1, const void *str2, size_t n)
 * @description:C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str1 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    char str2[100] = {0};
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    int size = strlen(str2);

    char* rst = (char*)memcpy(str1, str2, size);
   
    if (rst == nullptr) {
        return 0;
    }
    cout << rst << endl;
    cout << str1 << endl;
    

    getchar();
    return 0;
}
// input : str1: 123456789 str2: qwer 
// output: rst:qwer56789 str1:qwer56789

4.memmove

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: void *memmove(void *str1, const void *str2, size_t n)
 * @description:C 库函数 void *memmove(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str1 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    char str2[100] = {0};
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    int size = strlen(str2);
    cout << size << endl;

    char* rst = (char*)memmove(str1, str2, size);
    
    if (rst == nullptr) {
        return 0;
    }

    cout << rst << endl;
    cout << str1 << endl;
    getchar();
    return 0;
}
// input :  str1: 123456789 str2: qwer 
// output:  rst:qwer56789 str1:qwer56789

5.memset

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: void *memset(void *str1, int c, size_t n)
 * @description:C 库函数 void *memset(void *str1, int c, size_t n) 将str1的前n个字符替换为c对应得ascill值
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str1 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    cin.getline(str1, 100);
    char c = getchar();
    int n = 0;
    cin >> n;

    char *rst = static_cast<char*>(memset(str1, c, n));

    cout << rst << endl;
    cout << str1 << endl;
    
    getchar();
    getchar();
    return 0;
}
// input:  str1: 123456789 c:a n:3
// output: rst:aaa456789 str1:aaa456789

6.strcat和strncat

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: char *strcat(char *str1, const char* str2)
 * @description:C 库函数 char *strcat(char *str1, const char* str2) 将str2追加到str1后面
 * @description:C 库函数 char *strcat(char *str1, const char* str2, size_t n) 将str2的前n个字节追加到str1后面
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str1 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    char str2[100] = {0};

    cin.getline(str1, 100);
    cin.getline(str2, 100);

    char *rst = strcat(str1, str2);

    cout << rst << endl;
    cout << str1 << endl;

    rst = strncat(str1, str2, 2);

    cout << rst << endl;
    cout << str1 << endl;
        
    getchar();
    return 0;
}
// input:str1: 123456789 str2:qwer
// output: rst:123456789qwer str1:123456789qwer
// output: rst:123456789qwerqw str1:123456789qwerqw

7.strchr和strrchr

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: char *strchr(const char *str, int c)
 * @original: char *strrchr(const char *str, int c)
 * @description:C 库函数 char *strchr(const char *str, int c) 返回str中第一次出现c的指针 
 * @description:C 库函数 char *strrchr(const char *str, int c) 返回str中最后一次出现c的指针 
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    cin.getline(str1, 100);

    char c = getchar();
    char *rst1 = strchr(str1, c);
    char *rst2 = strrchr(str1, c);

    cout << rst1 << endl;
    cout << rst2 << endl;
        
    getchar();
    getchar();

    return 0;
}

// input : str1: 12345678912 c:1
// output: rst1: 123456789 rst2:12

8.strcmp和strncmp

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: int strcmp(const char *str1, const char* str2)
 * @description:C 库函数 int strcmp(const char *str, const char* str2) 比较str1和str2的大小
 * @description:C 库函数 int strncmp(const char *str, const char* str2, size_t n) 比较str1和str2前n个字符的大小  
 * @param {*} 
 * @return > 返回1
 * @return < 返回-1
 * @return = 返回0
 */ 
int main()
{
    string str1;
    string str2;
    getline(cin, str1);
    getline(cin, str2);

    int rst = strcmp(str1.c_str(), str2.c_str());
    cout << rst << endl;

    rst = strncmp(str1.c_str(), str2.c_str(), 3);    
    cout << rst << endl;

    getchar(); 
    return 0;
}
// input:str1: 123456789 str2:123456666
// output: rst: 1
// output: rst: 0

9.strcpy和strncpy

#include <iostream>
#include <string.h>
using namespace std;

/**
 * @original: void *strncpy(const void *str1, const void *str2, size_t n)
 * @original: void *strcpy(const void *str1, const void *str2)
 * @description:C 库函数 void *strncpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str1 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    char str2[100] = {0};
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    int size = strlen(str2);

    char* rst = (char*)strncpy(str1, str2, size);
   
    if (rst == nullptr) {
        return 0;
    }
    cout << rst << endl;
    cout << str1 << endl;

    getchar();
    return 0;
}
// input : str1: 123456789 str2: qwer 
// output: rst:qwer56789 str1:qwer56789

10.strspn和strcspn

#include <iostream>
#include <string.h>
using namespace std;

/**
 * @original: void *strcspn(const void *str1, const void *str2)
 * @description: strcspn() 从字符串 str 的开头计算连续的字符,而这些字符都完全不在字符串 accept 中。
 *              简单地说,若 strcspn() 返回的数值为 n,则代表字符串 str 开头连续有 n 个字符都不含字符串 accept 中的字符。
 * @original: void *strspn(const void *str1, const void *str2)
 * @description:strspn() 从参数 str 字符串的开头计算连续的字符,而这些字符都完全是 accept 所指字符串中的字符。
 *              简单的说,若 strspn() 返回的数值为n,则代表字符串 str 开头连续有 n 个字符都是属于字符串 accept 内的字符。
 * @param {*} 
 * @return 该函数返回一个指向目标存储区 str1 的指针。
 */ 
int main()
{
    char str1[100] = {0};
    char str2[100] = {0};
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    int rst1 = strcspn(str1, str2);
   
    int rst2 = strspn(str1, str2);
    cout << rst1<< endl;
    cout << rst2 << endl;
    
    getchar();
    return 0;
}
// input : str1: 123456789 str2: 123qwer4 
// output: rst1: 0 rst2:4

// input : str1: 12345q6789 str2: qwer4567 
// output: rst1: 3 rst2:0

11.strlen和sizeof

#include <iostream>
#include <string.h>
using namespace std;

/**
 * @original: size_t strlen(const char* str);
 * @description: 获取字符串长度,不包含结束字符
 * @description: sizof()获取字符串长度,包含结束字符
 * @param {*} 
 * @return 字符串长度
 */ 
int main()
{
    char str1[100] = {0};
    cin.getline(str1, 100);

    int rst1 = strlen(str1); 
    int rst2 = sizeof(str1);

    cout << rst1<< endl;
    cout << rst2 << endl;
    
    getchar();
    return 0;
}
// input : str1: 123456789
// output: rst1: 9 rst2:100

12.strerror

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

/**
 * @original: char* strerror(int errnum)
 * @description: 返回内部错误信息
 * @param {*} 
 * @return 内部错误信息。
 */ 
int main()
{
    FILE *fp = fopen("1.txt", "r"); 
    if (fp == nullptr) {
        cout << strerror(errno) << endl;
    }
    getchar();
    return 0;
}
// output: No such file or directory

13 strstr

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

/**
 * @original: char* strstr(const char* str1, const char* str2)
 * @description: 返回str2在str1中第一次出现的位置
 */ 
int main()
{
    char* str1 = (char*)malloc(100);
    char* str2 = (char*)malloc(100);
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    if (str1 == nullptr || str2 == nullptr) {
        return 0;
    }
    
    char* rst = strstr(str1, str2);
    cout << rst << endl;
    getchar();
    free(str1);
    free(str2);
    return 0;
}
// input: str1: 123456789 str2:56
// output: 56789

14.strpbrk

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

/**
 * @original: char* strpbrk(const char* str1, const char* str2)
 * @description: 依次遍历str1中的字符,返回str1中字符第一次出现在str2中的位置
 */ 
int main()
{
    char* str1 = (char*)malloc(100);
    char* str2 = (char*)malloc(100);
    cin.getline(str1, 100);
    cin.getline(str2, 100);

    if (str1 == nullptr || str2 == nullptr) {
        return 0;
    }

    char* rst = strpbrk(str1, str2);
    cout << "rst:" << rst << endl;
    getchar();
    free(str1);
    free(str2);
    return 0;
}
// input: str1: 123456789 str2:qwerty75
// output: rst:56789

// input: str1: 123456789 str2:qwerty
// output: rst:

15.strtok

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

/**
 * @original: char *strtok(char *str, const char* delim)
 * @description:C 库函数 char *strtok(char *str, const char* delim)
 * @param {*} 
 * @return 该函数返回第一个被分解的字符串。
 */ 
int main()
{
    char str1[100] = {0};
    cin.getline(str1, 100);

    char delim[100] = {0};
    cin.getline(delim, 100);

    char* subStr = strtok(str1, delim);

    while (subStr != nullptr) {
        cout << subStr << endl;
        subStr = strtok(nullptr, delim);
    }
        
    getchar();

    return 0;
}

// input : str1: www.baidu.com delim:.
// output: www
//         baidu
//         com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值