您的位置:首页 > 其它

几个字符串简单操作函数

2013-03-01 14:57 232 查看
char *myitoa(int num,char *str,int radix) //把整数转换成字符串

{

    /* 索引表 */

    char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    unsigned unum; /* 中间变量 */

    int i=0,j,k;

    /* 确定unum的值 */

    if(radix==10&&num<0) /* 十进制负数 */

    {

        num=(unsigned)-num;

        str[i++]='-';

    }else

    unum=(unsigned)num; /* 其他情况 */

    /* 逆序 */

    do{

        str[i++]=index[unum%(unsigned)radix];

        unum/=radix;

    }while(unum);

    str[i]='\0';

    /* 转换 */

    if(str[0]=='-') k=1; /* 十进制负数 */

    else k=0;

    /* 将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果 */

    for(j=k;j<=(i-1)/2.0+k;j++){

        num=str[j];

        str[j]=str[i-j-1+k];

        str[i-j-1+k]=num;

    }

    return str;

}

DWORD CtoX(char* colour)//字符串转换成16进制

{

//    char a[] = "0xAbcd1234";

    int cnt, tmp;

    DWORD ret = 0;

    int i = 0;

    int colour_num = 2;

    

//    cnt = strlen(colour) - 1; /* 获取长度 */

    if(strlen(colour)==8)

        colour_num = 2;

    else if(strlen(colour)==6)

        colour_num = 0;

    else if(strlen(colour)==7)

        colour_num = 1;

//pt(1,"colour = %d",strlen(colour));

    for (cnt=strlen(colour)-1; cnt>=colour_num; cnt--, i++) {

        tmp = ctox(colour[cnt]);          /* 获取数字 */

//        printf("cnt = 0x%x\n", tmp);

        ret |= (tmp << i * 4);         /* 左移相应位数后赋值 */

    }

//pt(1,"ret = 0x%x", ret);

    return ret;

}

char** cSplit(char *string, char spliter)  

{  

    //分割后字符串数量  

    int num = 0;  

    //计算数量  

    int i = 0;  

    int size = strlen(string);  

    for(; i < size; i++)  

    {  

        //  

        if((string[i] != spliter) && (string[i + 1] == spliter || string[i + 1] == '\0')) num++;  

    }  

    //分配空间  

    char **cStrings = (char**)malloc(sizeof(char*) * (num + 1));  

    int j = 0;  

    for(; j <= num; j++)  

    {  

        //初始化指针数组  

        cStrings[j] = 0;      

    }  

    //保存分割后字符串  

    char *buffer = (char*)malloc(sizeof(char) * (size + 1));  

    int l = 0;  

    for(; l < size + 1; l++)  

    {  

        buffer[l] = 0;  

    }  

    int counter = 0;  

    int k = 0;  

    for(; k < size; k++)  

    {  

        if(string[k] != spliter)  

        {  

            int i = 0;  

            int j = k;  

            while(string[j] != spliter && string[j] != '\0')  

            {  

                buffer[i++] = string[j++];  

            }  

            buffer[i] = '\0';  

            cStrings[counter] = (char*)malloc(sizeof(char) * i);  

            strcpy(cStrings[counter++],buffer);  

            k = k + i;  

        }  

    }  

    free(buffer);  

    return cStrings;  

}  

 

/**

*调用此方法释放cSplit分配的内存空间

*/  

void freeStringsMemory(char **strings)  

{  

    //    

    int k = 0;  

   for(; ; k++)  

    {  

        //  

        if(strings[k] != 0) free(strings[k]);  

        else break;  

    }  

    free(strings);  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: