首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

瓜分字符

2012-08-15 
分割字符C/C++ code#有字符串:|2|fedc::213|52864|#想得到:str12str2fedc:213str352864#如果有

分割字符

C/C++ code
#有字符串:"|2|fedc::213|52864|"#想得到:       str1=2;    str2="fedc:213";    str3=52864;#如果有空值:"|||52864|"#依然得到:    str1=null;    str2=null;    str3=52864;#如果有空值:"|1||52864|"#依然得到:    str1=1;    str2=null;    str3=52864;#我试过strtok()函数,当其中有空值时,该函数只执行一次,并返回52864,前面两个str1、str2没有值。#在下初学C语言,还望多多指教。


[解决办法]
用sscanf试试
C/C++ code
#include <stdio.h>int main(){    char str[10] = {0};   char str1[10] ={0};   char str2[10] ={0};      char *pstr = "|2|fedc::213|52864|";   sscanf(pstr, "|%[^|]|%[^|]|%[^|]", str,str1,str2);   printf("%s\n", str);   printf("%s\n", str1);   printf("%s\n", str2);  return 0; }
[解决办法]
如果中间有空的情况下的输出:
C/C++ code
#include <stdlib.h>#include <string.h>#include <stdio.h>/* * substitution of getNthValue which dosen't destroy the original value */ /* *  argument:  [IN]     index -- the index array of deleted items(begin from 0) *             [IN]     count -- deleted itmes count. *             [IN/OUT] value -- original string/return string *             [IN]     delimit -- delimitor                        len  --   lenth of result; */int getNthValueSafe(int index, char *value, char delimit, char *result, int len){    int i=0, result_len=0;    char *begin, *end;    if(!value || !result || !len)        return -1;    begin = value;    end = strchr(begin, delimit);    while(i<index && end){        begin = end+1;        end = strchr(begin, delimit);        i++;    }    //no delimit    if(!end){        if(i == index){            end = begin + strlen(begin);            result_len = (len-1) < (end-begin) ? (len-1) : (end-begin);        }else            return -1;    }else        result_len = (len-1) < (end-begin)? (len-1) : (end-begin);    memcpy(result, begin, result_len );    *(result+ result_len ) = '\0';    return 0;}void main(){    char str[115] = "|2||fedc::213||52864|";    char result[10][10];    int i = 0, j = 1;    while(1)    {        i = getNthValueSafe( j, str, '|', result[j], sizeof(result));        printf("str%d:%s\n", j++, result[j]);        if( 0 != i)          break;    }} 

热点排行