zoukankan      html  css  js  c++  java
  • c/c++中与字符串处理相关的函数

    void *memccpy (void *dest, const void *src, int c, size_t n);

    src所指向的对象复制n个字符到dest所指向的对象中。如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置;否则返回NULL

    void *memcpy (void *dest, const void *src, size_t n);

    src所指向的对象复制n个字符到dest所指向的对象中。返回指针为dest的值。

    void *memchr (const void *s, int c, size_t n);

    s所指向的对象的前n个字符中搜索字符c。如果搜索到,返回指针指向字符c第一次出现的位置;否则返回NULL

    int memcmp (const void *s1, const void *s2, size_t n);

    比较s1所指向的对象和s2所指向的对象的前n个字符。返回值是s1s2第一个不同的字符差值。

    int memicmp (const void *s1, const void *s2, size_t n);

    比较s1所指向的对象和s2所指向的对象的前n个字符,忽略大小写。返回值是s1s2第一个不同的字符差值。

    void *memmove (void *dest, const void *src, size_t n);

    src所指向的对象复制n个字符到dest所指向的对象中。返回指针为dest的值。不会发生内存重叠。

    void *memset (void *s, int c, size_t n);

    设置s所指向的对象的前n个字符为字符c。返回指针为s的值。

    char *stpcpy (char *dest, const char *src);

    复制字符串srcdest中。返回指针为dest + len(src)的值。

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

    复制字符串srcdest中。返回指针为dest的值。

    char *strcat (char *dest, const char *src);

    将字符串src添加到dest尾部。返回指针为dest的值。

    char *strchr (const char *s, int c);

    在字符串s中搜索字符c。如果搜索到,返回指针指向字符c第一次出现的位置;否则返回NULL

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

    比较字符串s1和字符串s2。返回值是s1s2第一个不同的字符差值。

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

    比较字符串s1和字符串s2,忽略大小写。返回值是s1s2第一个不同的字符差值。

    size_t strcspn (const char *s1, const char *s2);

    返回值是字符串s1的完全由不包含在字符串s2中的字符组成的初始串长度。

    size_t strspn (const char *s1, const char *s2);

    返回值是字符串s1的完全由包含在字符串s2中的字符组成的初始串长度。

    char *strdup (const char *s);

    得到一个字符串s的复制。返回指针指向复制后的字符串的首地址。

    char *strerror(int errnum);

    返回指针指向由errnum所关联的出错消息字符串的首地址。errnum的宏定义见errno.h

    size_t strlen (const char *s);

    返回值是字符串s的长度。不包括结束符'/0'

    char *strlwr (char *s);

    将字符串s全部转换成小写。返回指针为s的值。

    char *strupr (char *s);

    将字符串s全部转换成大写。返回指针为s的值。

    char *strncat (char *dest, const char *src, size_t maxlen);

    将字符串src添加到dest尾部,最多添加maxlen个字符。返回指针为dest的值。

    int strncmp (const char *s1, const char *s2, size_t maxlen);

    比较字符串s1和字符串s2,最多比较maxlen个字符。返回值是s1s2第一个不同的字符差值。

    char *strncpy (char *dest, const char *src, size_t maxlen);

    复制字符串srcdest中,最多复制maxlen个字符。返回指针为dest的值。

    int strnicmp(const char *s1, const char *s2, size_t maxlen);

    比较字符串s1和字符串s2,忽略大小写,最多比较maxlen个字符。返回值是s1s2第个不同的字符差值。

    char *strnset (char *s, int ch, size_t n);

    设置字符串s中的前n个字符全为字符c。返回指针为s的值。

    char *strset (char *s, int ch);

    设置字符串s中的字符全为字符c。返回指针为s的值。

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

    返回指针指向字符串s1中字符串s2的任意字符第一次出现的位置;如果未出现返回NULL

    char *strrchr (const char *s, int c);

    在字符串s中搜索字符c。如果搜索到,返回指针指向字符c最后一次出现的位置;否则返回NULL

    char *strrev (char *s);

    将字符串全部翻转,返回指针指向翻转后的字符串

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

    在字符串s1中搜索字符串s2。如果搜索到,返回指针指向字符串s2第一次出现的位置;否则返回NULL

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

    用字符串s2中的字符做分隔符将字符串s1分割。返回指针指向分割后的字符串。第一次调用后需用NULLL替代s1作为第一个参数。

    c中:

    //内存分配函数

    void*  malloc(size_t  size);

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int main()
     4 {
     5     int i, n;
     6     char *buffer;
     7     
     8     printf("how long do you want the string? ");
     9     scanf("%d", &i);
    10     
    11     buffer = (char*)malloc(i+1);
    12     if(buffer == NULL)  //分配堆内存失败
    13         exit(1); 
    14          memset(buffer, 0, i+1);      
    15      for(n=0; n<i; n++)
    16      {
    17         buffer[n] = rand()%26 + 'a';
    18      }
    19      buffer[i] = '';
    20     
    21     printf("Random string: %s
    ", buffer);
    22     free(buffer);
    23     return 0;
    24 }

    //内存填充函数:

    void * memset(void *dest, int c, size_t count);

     1 #include  <stdio.h>
     2 #include  <string.h>
     3 int main()
     4 {
     5             char str[]  = "almost every progreammer should know memset";
     6             memset(str,  '-',  6);
     7             puts(str);
     8             
     9             return 0;
    10 }            
    11 //输出: ------every progreammer should know memeset;                        

    memcpy

    原型:void * memcpy(void * destination, const void * source , size_t  num);     .//参数是指针;

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 struct {
     5     char name[40];
     6     int age;
     7 }person, person_copy;
     8 
     9 int main()
    10 {
    11     char myname[] = "Pierre de Fermat ";
    12     //using memcpy to copy string;
    13     memcpy(person.name, myname, strlen(myname)+1 );
    14     person.age = 46;
    15 
    16     //using memcpy to copy structure 
    17     memcpy( &person_copy, &person, sizeof(person));
    18     
    19     printf("person_copy: %s, %d 
    ", person_copy.name, person_copy.age );
    20     
    21     return 0;
    22 }
    ------输出:
      person_copy: Pierre de Fermat , 46

    //字符串中查找某个字符 函数

    char * strchr(const char* ,  int );

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int main()
     5 {
     6     char str[] = "This is a  sample ";
     7     //char ch = 's'; ----这样也可以的
     8     int ch = 's';
     9     char *pch;
    10     printf("looking for the 's' character in  "%s" ...
    ", str);
    11     
    12     pch = strchr(str, ch);
    13     while(pch != NULL)
    14     {
    15         printf("%s
    ", pch);
    16         printf("found at %d
    ", pch-str+1);  //确定位置
    17         pch = strchr(pch+1, 's');
    18     }    
    19         
    20     return 0;
    21 }
    输出:
    looking for the 's' character in  "This is a  sample " ...
    s is a  sample
    found at 4
    s a  sample
    found at 7
    sample
    found at 12

    //字符串分割函数

     char *strtok(char *str1, char *str2);

    str2的集合, str1 会根据这里的每个字符进行分割

     1 //调用 strtok 后, 原字符串会被修改.而且它是确定的,即截取的第一段;
     2 #include <stdio.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     char str[] = " this , a  sample, string";
     8     char *pch;
     9     char *psh = ",";
    10     
    11     printf("Splitting string "%s" into to 
    ", str);
    12     
    13     pch = strtok(str, psh);     //第一次调用, 第一参数为源串;-----参数是指针;    
    14     while(pch !=NULL)
    15     {
    16         printf("源字符串被截取之后为:%s
    ", str);
    17         printf("函数的返回值为:%s
    ", pch);
    18         pch = strtok(NULL, psh);      //第2, 3,。。。。次调用,第一个参数使用NULL
    19     }
    20 
    21     return 0;
    22 }
    输出:
    Splitting string " this , a  sample, string" into to
    源字符串被截取之后为: this
    函数的返回值为: this
    源字符串被截取之后为: this
    函数的返回值为: a  sample
    源字符串被截取之后为: this
    函数的返回值为: string

    strcpy    //strncpy()

    原型:char * strcpy(char * destination, const char * source );     //参数是指针;

    原型: char* strncpy(char *destination, const char *source, size_t num);  //参数是指针;

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int main()
     5 {
     6     char str1[] = "Sample string ";
     7     char str2[40];
     8     char str3[40];
     9 
    10     strcpy(str2, str1);
    11     strcpy(str3, "copy successful ");
    12     
    13     printf("str1: %s
     str2: %s
     str3: %s
     ", str1, str2, str3);
    14     
    15     return 0;
    16 }
    -----输出
    str1: Sample string
     str2: Sample string
     str3: copy successful

    c++中

    string::c_str()

    1.string类成员函数c_str() 的原型:

       const char *c_str() const;    //返回一个以null终止的c字符串;

    2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式;

       这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。

       注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针

    1 char * c;
    2 string str = "12345";
    3 c = str.c_str();     ////c最后指向的内容是垃圾,因为s对象被析构,其内容被处理 
    4 
    5 应该这样用:
    6 char c[20];
    7 string s="1234";
    8 strcpy(c,s.c_str()); 
    9 这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
     1 #include <iostream>
     2 #include <cstring>
     3 #include <string>
     4 
     5 int main()
     6 {
     7     std::string str("please split this sentense into tokens");
     8     
     9     char *cstr = new char[str.length()+1];
    10     std::strcpy(cstr, str.c_str());  //c_str()转为指针;
    11 
    12     std::cout <<"cstr = "<< cstr << std::endl;
    13     char *p = std::strtok(cstr, " ");
    14     while(p != 0)
    15     {
    16         std::cout << p << '
    ';
    17         p = strtok(NULL, " ");
    18     }
    19     
    20     delete[] cstr;
    21     return 0;
    22 }

    string::length     //等价于 string::size()

    原型:size_t length() const;

    return length of string

     1 #include <iostream>
     2 #include <string>
     3 
     4 int main()
     5 {
     6     std::string str("test string ");
     7     std::cout << "the size of str is " << str.length() << "  characters. 
    ";
     8     std::cout << "the size of str is " << str.size() << "  characters. 
    ";
     9     return 0;
    10 }

    string::resize

    原型:void resize(size_t   n);

          void resize (size_t   n,  char  c);

    resize函数用来改变string的大小,如果size小于来string的size大小,则截取前size个字符,如果大于,则用c补充

     1 #include <iostream>
     2 #include <string>
     3 
     4 int main()
     5 {
     6     std::string str("I like to code in  C");
     7     std::cout << str << std::endl;
     8     
     9     unsigned sz = str.size();
    10     std::cout << sz << std::endl;
    11     std::cout << str << std::endl;
    12 
    13     str.resize(sz+2, '+');
    14     std::cout << str << std::endl;
    15         
    16     str.resize(14);
    17     std::cout << str << std::endl;
    18     str.resize(24);
    19     std::cout << str << std::endl;
    20     
    21     return 0;
    22 }
    -----输出:
    I like to code in  C
    20
    I like to code in  C
    I like to code in  C++
    I like to code in  C++
    I like to code
  • 相关阅读:
    丑数——剑指offer面试题34
    把整数排成最小的数——剑指offer面试题33
    从1到n整数中1出现的次数——剑指offer面试题32
    各种排序方法及其比较
    scrapy安装
    水仙花数
    分数化小数(decimal)
    子序列的和
    倒三角
    韩信点兵
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3487675.html
Copyright © 2011-2022 走看看