现在的位置: 首页 > 综合 > 正文

C++字符串函数

2013年09月16日 ⁄ 综合 ⁄ 共 16035字 ⁄ 字号 评论关闭

 

函数名: 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/n", 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/n", 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/n", c, ptr-string);
    else
       printf("The character was not found/n");
    return 0;
 }
 
 
 

函数名: strcmp
功  能: 串比较
用  法: int strcmp(char *str1, char *str2);
看Asic码,str1>str2,返回值 > 0;两串相等,返回0
程序例:

#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/n");
    else
       printf("buffer 2 is less than buffer 1/n");

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

    return 0;
 }
 
 
 

函数名: strncmpi
功  能: 将一个串中的一部分与另一个串比较, 不管大小写
用  法: int strncmpi(char *str1, char *str2, unsigned maxlen);
程序例:

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

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

   ptr = strcmpi(buf2, buf1);

   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1/n");

   if (ptr < 0)
      printf("buffer 2 is less than buffer 1/n");

   if (ptr == 0)
      printf("buffer 2 equals buffer 1/n");

   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/n", string);
    return 0;
 }
 
 
 

函数名: strcspn
功  能: 在串中查找第一个给定字符集内容的段
用  法: int strcspn(char *str1, char *str2);
程序例:

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

int main(void)
 {
    char *string1 = "1234567890";
    char *string2 = "747DC8";
    int length;

    length = strcspn(string1, string2);
    printf("Character where strings intersect is at position %d/n", length);

    return 0;
 }
 
 
 

函数名: strdup
功  能: 将串拷贝到新建的位置处
用  法: char *strdup(char *str);
程序例:

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

int main(void)
 {
    char *dup_str, *string = "abcde";

    dup_str = strdup(string);
    printf("%s/n", dup_str);
    free(dup_str);

    return 0;
 }
 
 
 

函数名: stricmp
功  能: 以大小写不敏感方式比较两个串
用  法: int stricmp(char *str1, char *str2);
程序例:

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

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

   ptr = stricmp(buf2, buf1);

   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1/n");

   if (ptr < 0)
      printf("buffer 2 is less than buffer 1/n");

   if (ptr == 0)
      printf("buffer 2 equals buffer 1/n");

   return 0;
}
 
 

函数名: strerror
功  能: 返回指向错误信息字符串的指针
用  法: char *strerror(int errnum);
程序例:

#include <stdio.h>
#include <errno.h>

int main(void)
{
   char *buffer;
   buffer = strerror(errno);
   printf("Error: %s/n", buffer);
   return 0;
}
 
 
 

函数名: strcmpi
功  能: 将一个串与另一个比较, 不管大小写
用  法: int strcmpi(char *str1, char *str2);
程序例:

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

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

   ptr = strcmpi(buf2, buf1);

   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1/n");

   if (ptr < 0)
      printf("buffer 2 is less than buffer 1/n");

   if (ptr == 0)
      printf("buffer 2 equals buffer 1/n");

   return 0;
}
 
 
 

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

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

int  main(void)

{
   char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";
   int ptr;

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

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

   return(0);
}
 
 

函数名: strncmpi
功  能: 把串中的一部分与另一串中的一部分比较, 不管大小写
用  法: int strncmpi(char *str1, char *str2);
程序例:

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

int main(void)
{
   char *buf1 = "BBBccc", *buf2 = "bbbccc";
   int ptr;

   ptr = strncmpi(buf2,buf1,3);

   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1/n");

   if (ptr < 0)
      printf("buffer 2 is less than buffer 1/n");

   if (ptr == 0)
      printf("buffer 2 equals buffer 1/n");

   return 0;
}
 
 

函数名: strncpy
功  能: 串拷贝
用  法: char *strncpy(char *destin, char *source, int maxlen);
程序例:

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

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

   strncpy(string, str1, 3);
   string[3] = '/0';
   printf("%s/n", string);
   return 0;
}
 
 

函数名: strnicmp
功  能: 不注重大小写地比较两个串
用  法: int strnicmp(char *str1, char *str2, unsigned maxlen);
程序例:

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

int main(void)
{
   char *buf1 = "BBBccc", *buf2 = "bbbccc";
   int ptr;

   ptr = strnicmp(buf2, buf1, 3);

   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1/n");

   if (ptr < 0)
      printf("buffer 2 is less than buffer 1/n");

   if (ptr == 0)
      printf("buffer 2 equals buffer 1/n");

   return 0;
}
 
 
 

函数名: strnset
功  能: 将一个串中的所有字符都设为指定字符
用  法: char *strnset(char *str, char ch, unsigned n);
程序例:

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

int main(void)
{
   char *string = "abcdefghijklmnopqrstuvwxyz";
   char letter = 'x';

   printf("string before strnset: %s/n", string);
   strnset(string, letter, 13);
   printf("string after  strnset: %s/n", string);

   return 0;
}
 
 

函数名: strpbrk
功  能: 在串中查找给定字符集中的字符
用  法: char *strpbrk(char *str1, char *str2);
程序例:

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

int main(void)
{
   char *string1 = "abcdefghijklmnopqrstuvwxyz";
   char *string2 = "onm";
   char *ptr;

   ptr = strpbrk(string1, string2);

   if (ptr)
      printf("strpbrk found first character: %c/n", *ptr);
   else
      printf("strpbrk didn't find character in set/n");

   return 0;
}
 
 
 

函数名: strrchr
功  能: 在串中查找指定字符的最后一个出现
用  法: char *strrchr(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 = strrchr(string, c);
   if (ptr)
      printf("The character %c is at position: %d/n", c, ptr-string);
   else
      printf("The character was not found/n");
   return 0;
}
 
 
 

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

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

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

   printf("Before strrev(): %s/n", forward);
   strrev(forward);
   printf("After strrev():  %s/n", 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/n", string);
   strset(string, symbol);
   printf("After strset():  %s/n", string);
   return 0;
}
 
 
 

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

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

int main(void)
{
   char *string1 = "1234567890";
   char *string2 = "123DC8";
   int length;

   length = strspn(string1, string2);
   printf("Character where strings differ is at position %d/n", length);
   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/n", 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/n", input, value);
   return 0;
}
 
 
 

函数名: strtok
功  能: 查找由在第二个串中指定的分界符分隔开的单词
用  法: char *strtok(char *str1, char *str2);
程序例:

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

int main(void)
{
   char input[16] = "abc,d";
   char *p;

   /* strtok places a NULL terminator
   in front of the token, if found */
   p = strtok(input, ",");
   if (p)   printf("%s/n", p);

   /* A second call to strtok using a NULL
   as the first parameter returns a pointer
   to the character following the token  */
   p = strtok(NULL, ",");
   if (p)   printf("%s/n", p);
   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/n", 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/n", ptr);
   return 0;
}
 
 
 

函数名: swab
功  能: 交换字节
用  法: void swab (char *from, char *to, int nbytes);
程序例:

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

char source[15] = "rFna koBlrna d";
char target[15];

int main(void)
{
   swab(source, target, strlen(source));
   printf("This is target: %s/n", target);
   return 0;
}

 

常用函数源码

很多人认为C语言中的难点是指针,对指针的理解直接关系到所编程序的好坏,所以,
在这里列举了一些C编译器通常都有的标准函数的源代码,看过它们,就能对指针和字符串
有所了解了.
1. strlen(),计算字符串长度
int strlen(const char string)
{
int i=0;
while(string[i]) i++;
return i;
}
2. strcpy(), 字符串拷贝.
char *strcpy(char *destination, const char *source)
{
while(*destinaton++=*source++);
return (destination-1);
}
3. strcat(), 字符串的连接.
char *strcat(char *target,const char *source)
{
char *original=target;
while(*target) target++;     // Find the end of the string
while(*target++=*source++);
return(original);
}
4. streql(), 判断两个字符串是否相等.
int streql(char *str1,char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
return((*str1==NULL)&&(*str2==NULL));
}
5. strchr(), 在字符串中查找某个字符.
char *strchr(const char *string,int letter)
{
while((*string!=letter)&(*string))
string++;
return (string);
}
6. chrcnt(), 计算某个字符在字符串中出现的次数.
int chrcnt(const char *string,int letter)
{
int count=0;
while(*string)
if(*string==letter)count++;
return count;
}
7. strcmp(), 判断两个字符串是否相等.
int strcmp(const char *str1,const char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
if((*str1==*str2)&&(!*str1)) //Same strings
return o;
else if((*str1)&&(!*str2))  //Same but str1 longer
return -1;
else if((*str2)&&(!*str1)) //Same but str2 longer
else
return((*str1>*str2)?-1:1);
}

2、strcmp函数:

int mystrcmp(const char *str1,const char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
if((*str1==*str2)&&(!*str1)) //Same strings
return 0;
else if((*str1)&&(!*str2))  //Same but str1 longer
return 1;
else if ((!*str1)&&(*str2))
return -1 ;
else
return ((*str1>*str2)?1:-1);

}

3、strcat函数:

char *mystrcat(char *target,const char *source)
{
char *original=target;
while(*target) target++;     // Find the end of the string
while(*target++=*source++);
return(original);
}

int main(void)
{

  char destination[25];
  char * cc;                                                            
char *blank = " ", *c = "C++", *Borland = "Borland";
strcpy(destination, Borland);
mystrcat(destination, blank);
cc=mystrcat(destination, c);
printf("%s/n", cc);

}
4、strcpy函数

char *mystrcpy(char *destination, const char *source)
{
while(*destination++=*source++);            
return (destination);
}

5、strlen函数
int mystrlen(const char *string)
{
int i=0;
while(*string++)
 i++;
 return i;
}
5、streql函数
 int mystreql(char *str1,char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
return((*str1==NULL)&&(*str2==NULL));
}
6、strchr函数
char * mystrchr(const char *string,char letter)
{
while((*string!=letter)&&(*string))
string++;
return (string);
}

int main(void)
{
char string[15];
char *ptr, c = 'r';
strcpy(string, "This is a string");
ptr = mystrchr(string, c);

if (ptr)
printf("The character %c is at position: %d/n", c,ptr-string);
else
printf("The character was not found/n");
return 0;
}
7、ctrcnt函数
int mychrcnt(const char *string,char letter) /*指定计算字符串内的指定字符的个数*/
{
int count=0;

while(*string)
{
    if(*string==letter)
    count++;
    string++;
}
return count;
}

 

函数strcpy的实现源代码
  char *strcpy(char *strDest, const char *strSrc);
  {
  assert((strDest!=NULL) && (strSrc !=NULL));
  char *address = strDest;
  while( (*strDest++ = * strSrc++) != ‘/0’ )
  NULL ;
  return address ;
  }

函数strcat的实现源代码
char * strcat(char * dest, const char * src)
{
        char *tmp = dest;

        while (*dest)
                dest++;
        while ((*dest++ = *src++) != '/0')
                ;

        return tmp;
}

函数原型:int strcmp(const char *dest, const char *source) ;

返回值:返回整数值,如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。字符大小是按照字符的字典序列进行排列的。

参数说明:都是以''/0''为结束符的字符串

函数strcmp的实现源代码
int strcmp(const char *dest, const char *source)  
{  
   assert((NULL != dest) && (NULL != source));  
   while (*dest && *source && (*dest == *source))  
           {  
                    dest ++;  
                   source ++;  
           }  
return *dest - *source;  
/*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。*/
}

函数memset的实现源代码
void* memcpy( void* dest, const void* src, size_t count )
{

if (count<0)

{printf("Invalid count number !./n");

return (void*)0;}

if(src==NULL||dest==NULL)

return (void*)0 ;

if ((unsigned int)dest==(unsigned int)src)

{printf("The source is equal with the destanation!./n");

return dest;}

    char* d = (char*)dest;
    const char* s = (const char*)src;
while(count--)
     *d++ = *s++;
    return dest;
}

函数memset的实现源代码
void* memcpy( void* dest, const void* src, size_t count )
{

if (count<0)

{printf("Invalid count number !./n");

return (void*)0;}

if(src==NULL||dest==NULL)

return (void*)0 ;

if ((unsigned int)dest==(unsigned int)src)

{printf("The source is equal with the destanation!./n");

return dest;}

    char* d = (char*)dest;
    const char* s = (const char*)src;
while(count--)
     *d++ = *s++;
    return dest;
}

函数strlen的实现源代码
  int strlen(const char *str)

  {

  assert(str != NULL);

  int len = 0;

  while((*str++) != '/0')

  len++;

  return len;

  }

函数malloc的实现源代码

引用:http://topic.csdn.net/t/20051114/18/4392766.html

   
#ifndef   CRAY  
#define   STACKMIN   512  
#define   MINBLK   (2*sizeof(struct   mem)   +   16)  
#define   F   _malloc_free_  
#define   SBGULP   8192  
#include   "string.h" /*   for   memcpy   */  
   
#ifdef   KR_headers  
#define   Char   char  
#define   Unsigned   unsigned  
#define   Int   /*int*/  
#else  
#define   Char   void  
#define   Unsigned   size_t  
#define   Int   int  
#endif  
   
typedef   struct   mem   {  
struct   mem   *next;  
Unsigned   len;  
}   mem;  
   
mem   *F;  
   
    Char   *  
#ifdef   KR_headers  
malloc(size)  
register   Unsigned   size;  
#else  
malloc(register   Unsigned   size)  
#endif  
{  
register   mem   *p,   *q,   *r,   *s;  
unsigned   register   k,   m;  
extern   Char   *sbrk(Int);  
char   *top,   *top1;  
   
size   =   (size+7)   &   ~7;  
r   =   (mem   *)   &F;  
for   (p   =   F,   q   =   0;   p;   r   =   p,   p   =   p->next)   {  
if   ((k   =   p->len)   >=   size   &&   (!q   ||   m   >   k))   {  
m   =   k;  
q   =   p;  
s   =   r;  
}  
}  
if   (q)   {  
if   (q->len   -   size   >=   MINBLK)   {   /*   split   block   */  
p   =   (mem   *)   (((char   *)   (q+1))   +   size);  
p->next   =   q->next;  
p->len   =   q->len   -   size   -   sizeof(mem);  
s->next   =   p;  
q->len   =   size;  
}  
else  
s->next   =   q->next;  
}  
else   {  
top   =   (Char   *)(((long)sbrk(0)   +   7)   &   ~7);  
if   (F   &&   (char   *)(F+1)   +   F->len   ==   top)   {  
q   =   F;  
F   =   F->next;  
}  
else  
q   =   (mem   *)   top;  
top1   =   (char   *)(q+1)   +   size;  
if   (sbrk((int)(top1-top+SBGULP))   ==   (Char   *)   -1)  
return   0;  
r   =   (mem   *)top1;  
r->len   =   SBGULP   -   sizeof(mem);  
r->next   =   F;  
F   =   r;  
q->len   =   size;  
}  
return   (Char   *)   (q+1);  
}  
   
    void  
#ifdef   KR_headers  
free(f)  
Char   *f;  
#else  
free(Char   *f)  
#endif  
{  
mem   *p,   *q,   *r;  
char   *pn,   *qn;  
   
if   (!f)   return;  
q   =   (mem   *)   ((char   *)f   -   sizeof(mem));  
qn   =   (char   *)f   +   q->len;  
for   (p   =   F,   r   =   (mem   *)   &F;   ;   r   =   p,   p   =   p->next)   {  

if   (qn   ==   (Char   *)   p)   {  
q->len   +=   p->len   +   sizeof(mem);  
p   =   p->next;  
}  
pn   =   p   ?   ((char   *)   (p+1))   +   p->len   :   0;  
if   (pn   ==   (Char   *)   q)   {  
p->len   +=   sizeof(mem)   +   q->len;  
q->len   =   0;  
q->next   =   p;  
r->next   =   p;  
break;  
}  
if   (pn   <   (char   *)   q)   {  
r->next   =   q;  
q->next   =   p;  
break;  
}  
}  
}  
   
    Char   *  
#ifdef   KR_headers  
realloc(f,   size)  
Char   *f;  
Unsigned   size;  
#else  
realloc(Char   *f,   Unsigned   size)  
#endif  
{  
mem   *p;  
Char   *q,   *f1;  
Unsigned   s1;  
   
if   (!f)   return   malloc(size);  
p   =   (mem   *)   ((char   *)f   -   sizeof(mem));  
s1   =   p->len;  
free(f);  
if   (s1   >   size)  
s1   =   size   +   7   &   ~7;  
if   (!p->len)   {  
f1   =   (Char   *)(p->next   +   1);  
memcpy(f1,   f,   s1);  
f   =   f1;  
}  
q   =   malloc(size);  
if   (q   &&   q   !=   f)  
memcpy(q,   f,   s1);  
return   q;  
}  
   
/*   The   following   (calloc)   should   really   be   in   a   separate   file,   */  

/*   but   defining   it   here   sometimes   avoids   confusion   on   systems   */  

/*   that   do   not   provide   calloc   in   its   own   file.   */  
   
    Char   *  
#ifdef   KR_headers  
calloc(n,   m)   Unsigned   m,   n;  
#else  
calloc(Unsigned   n,   Unsigned   m)  
#endif  
{  
Char   *rv;  
rv   =   malloc(n   *=   m);  
if   (n   &&   rv)  
memset(rv,   0,   n);  
return   rv;  
}  
#endif   

抱歉!评论已关闭.