zoukankan      html  css  js  c++  java
  • C++ 字符串相关函数

    <转>自:http://zhidao.baidu.com/question/173202165.html


    首先就是memcpy
    表头文件: #include <string.h>
    定义函数: void *memcpy(void *dest, const void *src, size_t n)
    函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束''而结束
    返回值: 返回指向dest的指针
    附加说明: 指针src和dest所指的内存区域不可重叠
    例如:
    你需要复制串str=“wangyucao1989”中的“yucao”,那么可以这么写:
    memcpy(newstr,str+4,5);

    除了memcpy之外,string还提供了strncpy函数:
    函数名称: strncpy
    函数原型: char *strncpy(char *dest, const char *src,int count)
    函数功能: 将字符串src中的count个字符拷贝到字符串dest中去
    函数返回: 指向dest的指针
    参数说明: dest-目的字符串,src-源字符串,count-拷贝的字符个数
    所属文档: <string.h>

    还是上面的例子,这个程序可以这样写:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    char str[] = "wangyucao1989";

    char newstr[6];
    //memcpy(newstr,str+4,5);
    strncpy(newstr,str+4,5);
    newstr[5] = '';
    printf("%s ",newstr);
    return 0;
    }

    ========================================================
    位运算:
    运算方法有六种:

    & 与运算
    | 或运算
    ^ 异或运算
    ~ 非运算(求补)
    >> 右移运算
    << 左移运算

    运用这些基本的运算,我们可以解决acm所需的各种运算,给Bit赋1,赋0,给他的值取反,还有好多段操作。如下:

    功能 | 示例 | 位运算
    -----------------+---------------------+--------------------
    去掉最后一位 | (101101->10110) | x >> 1
    在最后加一个0 | (101101->1011010) | x < < 1
    在最后加一个1 | (101101->1011011) | x < < 1+1
    把最后一位变成1 | (101100->101101) | x | 1
    把最后一位变成0 | (101101->101100) | x | 1-1
    最后一位取反 | (101101->101100) | x ^ 1
    把右数第k位变成1 | (101001->101101,k=3) | x | (1 < < (k-1))
    把右数第k位变成0 | (101101->101001,k=3) | x & ~ (1 < < (k-1))
    右数第k位取反 | (101001->101101,k=3) | x ^ (1 < < (k-1))
    取末三位 | (1101101->101) | x & 7
    取末k位 | (1101101->1101,k=5) | x & ((1 < < k)-1)
    取右数第k位 | (1101101->1,k=4) | x >> (k-1) & 1
    把末k位变成1 | (101001->101111,k=4) | x | (1 < < k-1)
    末k位取反 | (101001->100110,k=4) | x ^ (1 < < k-1)
    把右边连续的1变成0 | (100101111->100100000) | x & (x+1)
    把右起第一个0变成1 | (100101111->100111111) | x | (x+1)
    把右边连续的0变成1 | (11011000->11011111) | x | (x-1)
    取右边连续的1 | (100101111->1111) | (x ^ (x+1)) >> 1
    去掉右起第一个1的左边 | (100101000->1000) | x & (x ^ (x-1))
    判断奇数 (x&1)==1
    判断偶数 (x&1)==0
    取右边第一个1所在位置 x&-x

    ================================================================
    类型转换:
    函数名: abs 功 能: 求整数的绝对值
    用 法: int abs(int i);
    程序例:
    #include <stdio.h>
    #include <math.h>

    int main(void)
    {
    int number = -1234;

    printf("number: %d absolute value: %d ", number, abs(number));
    return 0;
    }
    函数名: atof
    功 能: 把字符串转换成浮点数
    用 法: double atof(const char *nptr);
    程序例:
    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
    float f;
    char *str = "12345.67";

    f = atof(str);
    printf("string = %s float = %f ", str, f);
    return 0;
    }

    函数名: atoi
    功 能: 把字符串转换成长整型数
    用 法: int atoi(const char *nptr);
    程序例:
    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
    int n;
    char *str = "12345.67";

    n = atoi(str);
    printf("string = %s integer = %d ", str, n);
    return 0;
    }

    函数名: atol
    功 能: 把字符串转换成长整型数
    用 法: long atol(const char *nptr);
    程序例:

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

    int main(void)
    {
    long l;
    char *str = "98765432";

    l = atol(lstr);
    printf("string = %s integer = %ld ", str, l);
    return(0);
    }

    ===========================================================
    其他函数:
    函数名: bsearch
    功 能: 二分法搜索
    用 法: void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *));
    程序例:

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

    #define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))

    int numarray[] = {123, 145, 512, 627, 800, 933};

    int numeric (const int *p1, const int *p2)
    {
    return(*p1 - *p2);
    }

    int lookup(int key)
    {
    int *itemptr;

    /* The cast of (int(*)(const void *,const void*))
    is needed to avoid a type mismatch error at
    compile time */
    itemptr = bsearch (&key, numarray, NELEMS(numarray),
    sizeof(int), (int(*)(const void *,const void *))numeric);
    return (itemptr != NULL);
    }

    int main(void)
    {
    if (lookup(512))
    printf("512 is in the table. ");
    else
    printf("512 isn't in the table. ");

    return 0;
    }
    函数名: fabs
    功 能: 返回浮点数的绝对值
    用 法: double fabs(double x);
    程序例:

    #include <stdio.h>
    #include <math.h>

    int main(void)
    {
    float number = -1234.0;

    printf("number: %f absolute value: %f ",
    number, fabs(number));
    return 0;
    }

    函数名: fcvt
    功 能: 把一个浮点数转换为字符串
    用 法: char *fcvt(double value, int ndigit, int *decpt, int *sign);
    程序例:

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

    int main(void)
    {
    char *string;
    double value;
    int dec, sign;
    int ndig = 10;

    clrscr();
    value = 9.876;
    string = ecvt(value, ndig, &dec, &sign);
    printf("string = %s dec = %d
    sign = %d ", string, dec, sign);

    value = -123.45;
    ndig= 15;
    string = ecvt(value,ndig,&dec,&sign);
    printf("string = %s dec = %d sign = %d ",
    string, dec, sign);

    value = 0.6789e5; /* scientific
    notation */
    ndig = 5;
    string = ecvt(value,ndig,&dec,&sign);
    printf("string = %s dec = %d
    sign = %d ", string, dec, sign);

    return 0;
    }

    函数名: gcvt
    功 能: 把浮点数转换成字符串
    用 法: char *gcvt(double value, int ndigit, char *buf);
    程序例:

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

    int main(void)
    {
    char str[25];
    double num;
    int sig = 5; /* significant digits */

    /* a regular number */
    num = 9.876;
    gcvt(num, sig, str);
    printf("string = %s ", str);

    /* a negative number */
    num = -123.4567;
    gcvt(num, sig, str);
    printf("string = %s ", str);

    /* scientific notation */
    num = 0.678e5;
    gcvt(num, sig, str);
    printf("string = %s ", str);

    return(0);
    }
    函数名: itoa
    功 能: 把一整数转换为字符串
    用 法: char *itoa(int value, char *string, int radix);
    程序例:

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

    int main(void)
    {
    int number = 12345;
    char string[25];

    itoa(number, string, 10);
    printf("integer = %d string = %s ", number, string);
    return 0;
    }

    函数名: labs
    功 能: 取长整型绝对值
    用 法: long labs(long n);
    程序例:

    #include <stdio.h>
    #include <math.h>

    int main(void)
    {
    long result;
    long x = -12345678L;

    result= labs(x);
    printf("number: %ld abs value: %ld ",
    x, result);

    return 0;
    }
    函数名: memcpy
    功 能: 从源source中拷贝n个字节到目标destin中
    用 法: void *memcpy(void *destin, void *source, unsigned n);
    程序例:

    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
    char src[] = "******************************";
    char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";
    char *ptr;
    printf("destination before memcpy: %s ", dest);
    ptr = memcpy(dest, src, strlen(src));
    if (ptr)
    printf("destination after memcpy: %s ", dest);
    else
    printf("memcpy failed ");
    return 0;
    }
    函数名: memset
    功 能: 设置s中的所有字节为ch, s数组的大小由n给定
    用 法: void *memset(void *s, char ch, unsigned n);
    程序例:

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

    int main(void)
    {
    char buffer[] = "Hello world ";

    printf("Buffer before memset: %s ", buffer);
    memset(buffer, '*', strlen(buffer) - 1);
    printf("Buffer after memset: %s ", buffer);
    return 0;
    }
    函数名: pow 功 能: 指数函数(x的y次方)
    用 法: double pow(double x, double y);
    程序例:

    #include <math.h>
    #include <stdio.h>

    int main(void)
    {
    double x = 2.0, y = 3.0;

    printf("%lf raised to %lf is %lf ", x, y, pow(x, y));
    return 0;
    }

    函数名: qsort
    功 能: 使用快速排序例程进行排序
    用 法: void qsort(void *base, int nelem, int width, int (*fcmp)());
    程序例:

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

    int sort_function( const void *a, const void *b);

    char list[5][4] = { "cat", "car", "cab", "cap", "can" };

    int main(void)
    {
    int x;

    qsort((void *)list, 5, sizeof(list[0]), sort_function);
    for (x = 0; x < 5; x++)
    printf("%s ", list[x]);
    return 0;
    }

    int sort_function( const void *a, const void *b)
    {
    return( strcmp(a,b) );
    }

    函数名: sqrt
    功 能: 计算平方根
    用 法: double sqrt(double x);
    程序例:

    #include <math.h>
    #include <stdio.h>

    int main(void)
    {
    double x = 4.0, result;

    result = sqrt(x);
    printf("The square root of %lf is %lf ", x, result);
    return 0;
    }
    ========================================================

    字符串函数:
    函数名: sscanf
    功 能: 执行从字符串中的格式化输入
    用 法: int sscanf(char *string, char *format[,argument,...]);
    程序例:

    #include <stdio.h>
    #include <conio.h>

    int main(void)
    {
    char label[20];
    char name[20];
    int entries = 0;
    int loop, age;
    double salary;

    struct Entry_struct
    {
    char name[20];
    int age;
    float salary;
    } entry[20];

    /* Input a label as a string of characters restricting to 20 characters */
    printf(" Please enter a label for the chart: ");
    scanf("%20s", label);
    fflush(stdin); /* flush the input stream in case of bad input */

    /* Input number of entries as an integer */
    printf("How many entries will there be? (less than 20) ");
    scanf("%d", &entries);
    fflush(stdin); /* flush the input stream in case of bad input */

    /* input a name restricting input to only letters upper or lower case */
    for (loop=0;loop<entries;++loop)
    {
    printf("Entry %d ", loop);
    printf(" Name : ");
    scanf("%[A-Za-z]", entry[loop].name);
    fflush(stdin); /* flush the input stream in case of bad input */

    /* input an age as an integer */
    printf(" Age : ");
    scanf("%d", &entry[loop].age);
    fflush(stdin); /* flush the input stream in case of bad input */

    /* input a salary as a float */
    printf(" Salary : ");
    scanf("%f", &entry[loop].salary);
    fflush(stdin); /* flush the input stream in case of bad input */
    }

    /* Input a name, age and salary as a string, integer, and double */
    printf(" Please enter your name, age and salary ");
    scanf("%20s %d %lf", name, &age, &salary);

    /* Print out the data that was input */
    printf(" Table %s ",label);
    printf("Compiled by %s age %d $%15.2lf ", name, age, salary);
    printf("----------------------------------------------------- ");
    for (loop=0;loop<entries;++loop)
    printf("%4d | %-20s | %5d | %15.2lf ",
    loop + 1,
    entry[loop].name,
    entry[loop].age,
    entry[loop].salary);
    printf("----------------------------------------------------- ");
    return 0;
    }
    函数名: stpcpy
    功 能: 拷贝一个字符串到另一个
    用 法: char *stpcpy(char *destin, char *source);
    程序例:

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

    int main(void)
    {
    char string[10];
    char *str1 = "abcdefghi";

    stpcpy(string, str1);
    printf("%s ", string);
    return 0;
    }

    函数名: strcat
    功 能: 字符串拼接函数
    用 法: char *strcat(char *destin, char *source);
    程序例:

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

    int main(void)
    {
    char destination[25];
    char *blank = " ", *c = "C++", *Borland = "Borland";

    strcpy(destination, Borland);
    strcat(destination, blank);
    strcat(destination, c);

    printf("%s ", destination);
    return 0;
    }

    函数名: strchr
    功 能: 在一个串中查找给定字符的第一个匹配之处
    用 法: char *strchr(char *str, char c);
    程序例:

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

    int main(void)
    {
    char string[15];
    char *ptr, c = 'r';

    strcpy(string, "This is a string");
    ptr = strchr(string, c);
    if (ptr)
    printf("The character %c is at position: %d ", c, ptr-string);
    else
    printf("The character was not found ");
    return 0;
    }

    函数名: strcmp
    功 能: 串比较
    用 法: int strcmp(char *str1, char *str2);
    程序例:

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

    int main(void)
    {
    char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
    int ptr;

    ptr = strcmp(buf2, buf1);
    if (ptr > 0)
    printf("buffer 2 is greater than buffer 1 ");
    else
    printf("buffer 2 is less than buffer 1 ");

    ptr = strcmp(buf2, buf3);
    if (ptr > 0)
    printf("buffer 2 is greater than buffer 3 ");
    else
    printf("buffer 2 is less than buffer 3 ");

    return 0;
    }
    函数名: strcpy
    功 能: 串拷贝用 法: char *strcpy(char *str1, char *str2);
    程序例:

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

    int main(void)
    {
    char string[10];
    char *str1 = "abcdefghi";

    strcpy(string, str1);
    printf("%s ", string);
    return 0;
    }

    函数名: strrev
    功 能: 串倒转用 法: char *strrev(char *str);
    程序例:

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

    int main(void)
    {
    char *forward = "string";

    printf("Before strrev(): %s ", forward);
    strrev(forward);
    printf("After strrev(): %s ", forward);
    return 0;
    }
    函数名: strset
    功 能: 将一个串中的所有字符都设为指定字符
    用 法: char *strset(char *str, char c);
    程序例:

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

    int main(void)
    {
    char string[10] = "123456789";
    char symbol = 'c';

    printf("Before strset(): %s ", string);
    strset(string, symbol);
    printf("After strset(): %s ", string);
    return 0;
    }

    函数名: strstr
    功 能: 在串中查找指定字符串的第一次出现
    用 法: char *strstr(char *str1, char *str2);
    程序例:

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

    int main(void)
    {
    char *str1 = "Borland International", *str2 = "nation", *ptr;

    ptr = strstr(str1, str2);
    printf("The substring is: %s ", ptr);
    return 0;
    }

    函数名: strtod
    功 能: 将字符串转换为double型值
    用 法: double strtod(char *str, char **endptr);
    程序例:

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

    int main(void)
    {
    char input[80], *endptr;
    double value;

    printf("Enter a floating point number:");
    gets(input);
    value = strtod(input, &endptr);
    printf("The string is %s the number is %lf ", input, value);
    return 0;
    }
    函数名: strtol
    功 能: 将串转换为长整数
    用 法: long strtol(char *str, char **endptr, int base);
    程序例:

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

    int main(void)
    {
    char *string = "87654321", *endptr;
    long lnumber;

    /* strtol converts string to long integer */
    lnumber = strtol(string, &endptr, 10);
    printf("string = %s long = %ld ", string, lnumber);

    return 0;
    }

    函数名: strupr
    功 能: 将串中的小写字母转换为大写字母
    用 法: char *strupr(char *str);
    程序例:

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

    int main(void)
    {
    char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

    /* converts string to upper case characters */ ptr = strupr(string);
    printf("%s ", ptr);
    return 0;
    }

    函数名: tolower
    功 能: 把字符转换成小写字母
    用 法: int tolower(int c);
    程序例:

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

    int main(void)
    {
    int length, i;
    char *string = "THIS IS A STRING";

    length = strlen(string);
    for (i=0; i<length; i++)
    {
    string[i] = tolower(string[i]);
    }
    printf("%s ",string);

    return 0;
    }

    函数名: toupper
    功 能: 把字符转换成大写字母
    用 法: int toupper(int c);
    程序例:

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

    int main(void)
    {
    int length, i;
    char *string = "this is a string";

    length = strlen(string);
    for (i=0; i<length; i++)
    {
    string[i] = toupper(string[i]);
    }

    printf("%s ",string);

    return 0;
    }
  • 相关阅读:
    编程入门之结构体
    编程入门之函数理解
    编程入门之编码风格
    Linux基础 30分钟GDB调试快速突破
    GDB实战
    linux下终端游戏
    DSP学习教程基于28335(一)
    Linux内核模块编程可以使用的内核组件
    Windows10下配置Linux下C语言开发环境
    Git常规配置与基本用法
  • 原文地址:https://www.cnblogs.com/songer/p/5049098.html
Copyright © 2011-2022 走看看