C++中常用函数学习

1 strtok

来自Linux-2.5.0中的string.c

strtok函数的源码如下,其功能是对传进去的C风格字符串s进行分割,分割符由第二个参数ct给出网上找到的一段代码(http://zhidao.baidu.com/link?url=-kcqYo2nAhvDoxGS04TXg5nShuRmiJ3jPenuLvUlHkOwRQjK4jbssZgeNs1F_ue_P8QDaKIUhKjeS1bXLHKmua),介绍strtok的使用

/**
 * strtok - Split a string into tokens
 * @s: The string to be searched
 * @ct: The characters to search for
 *
 * WARNING: strtok is deprecated, use strsep instead.
 */
char * ___strtok;
char * strtok(char * s,const char * ct)
{
	char *sbegin, *send;

	sbegin  = s ? s : ___strtok;//首次调用时s为真,所以sbegin指向s的首地址
	if (!sbegin) {		    //如果sbegin为NULL值说明传递的字符串为空,直接返回	
		return NULL;
	}
	sbegin += strspn(sbegin,ct);//返回字符串sbegin中第一个不在指定字符串ct中出现的字符下标
	if (*sbegin == '\0') {      //如果sbegin已经为字符串结束符则返回
		___strtok = NULL;
		return( NULL );
	}
	send = strpbrk( sbegin, ct);//依次检验字符串sbegin中的字符,当被检验字符在字符串ct中也包含时,则停止检验,并返回被包含的字符
	if (send && *send != '\0') //将分割字符的位置置为'\0'
		*send++ = '\0'; //然后将send的指针向后移动一个位置
	___strtok = send;       //将移动后的send赋给全局变量__strtoke,下一次循环调用时,由于传递给strtok的第一个参数为NULL,所以sbegin=___strtok,也就是上一次的位置send,直到将字符串分割完毕
  

	return (sbegin);
}

strtok的使用如下

#include   <string.h> 
#include   <stdio.h> 
main() 
{ 
    char   s[]= "Wang   NIang   Huangddddangccccang   ldldldang   XXXXXXXX "; 
    char   *d= "ang ";//在s串中将包含有 "ang "的位置处加上NULL,注意空格的输出 
    char   *p; 
    
    p=strtok(s,d);//第一次调用,传要处理的串参数地址s 
    while(p) 
    { 
        printf( "%s\n ",p); 
        p=strtok(NULL,d); } 

    getchar(); 
    return   0; 
} 


2 strtok_r

#include<stdio.h>
#include<string.h>
#define INFO_MAX_SZ 255
int main()
{
    int in=0;
    char buffer[INFO_MAX_SZ]="Fred male 25,John male 62,Anna female 16";
    char *p[20];
    char *buf=buffer;

    char *outer_ptr=NULL;
    char *inner_ptr=NULL;
    
    while((p[in]=strtok_r(buf,",",&outer_ptr))!=NULL)
    {
        buf=p[in];
        while((p[in]=strtok_r(buf," ",&inner_ptr))!=NULL)
        {
            in++;
            buf=NULL;
        }
        p[in++]="***";
        buf=NULL;
    }
 
    printf("Here we have %d strings\n",in);
    for (int j=0; j<in; j++)
        printf(">%s<\n",p[j]);
    return 0;
}


3 linux下hash_map键为string

http://blog.csdn.net/langwenjing/article/details/8290678

http://no001.blog.51cto.com/1142339/1073027/

 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值