我想对下面的字符串进行处理
格式:数字:字符串1:数字,数字:字符串2:数字,.....,数字:字符串N:数字
例如:70:汉字\,:1,0:李果:1,.....,340:字符串:1处理时按","进行分隔
buf1 = 70:汉字\,:1
buf2 = 0:李果:1
.............
bufN = 340:字符串:1请教以下路过高人
格式:数字:字符串1:数字,数字:字符串2:数字,.....,数字:字符串N:数字
例如:70:汉字\,:1,0:李果:1,.....,340:字符串:1处理时按","进行分隔
buf1 = 70:汉字\,:1
buf2 = 0:李果:1
.............
bufN = 340:字符串:1请教以下路过高人
解决方案 »
- 请问VC如何定义缺省参数呢?
- 请问一个c++中使用托管代码出现的问题?
- 当一个外部设备的消息来时,我该在哪里捕获呢?
- ****弱智问题,高分相送****
- 各位大哥大姐,谁能给我提供一个ADO的封装类,谢谢!
- 学了两天VC,我发现VC很easy,不过这么个小问题问了几遍了,堂堂大中国难道就没有一个人知道吗?漂亮女模特跪求各位给我一些现成的代码
- 想学VC,用windows API编程(不用mfc)望给个学习建议,或推荐几本好书?
- 这是怎么回事,我只是加入了一个MSFlexGrid控件,对话框就没了!!!!!!!
- 高手呀,您快请进!如何用socket传输一幅jpeg图像(jpeg图像存放在文件或者缓冲区中,有100k大小)
- 十进制转换十六进制
- vista下如何写注册表把程序加入防火墙exception?搞不定就得丢饭碗了,救小弟一命!!!
- SQL Server 企业管理器如何修改数据显示格式?
int Len;
int TotalLen;
TotalLen=s.Length();
Len=s.Find(",",0);
s1=s.Left(Len);
s=s.Right(TotalLen-Len);TotalLen=s.Length();
Len=s.Find(",",0);
s2=s.Left(Len);
s=s.Right(TotalLen-Len);TotalLen=s.Length();
Len=s.Find(",",0);
s3=s.Left(Len);
//s=s.Right(TotalLen-Len);这样就可以到不同的字符串了
* to print all the tokens (separated by commas
* or blanks) in the string named "string".
*/#include <string.h>
#include <stdio.h>char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;void main( void )
{
printf( "%s\n\nTokens:\n", string );
/* Establish string and get the first token: */
token = strtok( string, seps );
while( token != NULL )
{
/* While there are tokens in "string" */
printf( " %s\n", token );
/* Get next token: */
token = strtok( NULL, seps );
}
}
int main(int argc, char* argv[])
{
char *str = "70:0:汉字\,:1:1,340:0:李果:1:1";
char *p, *q = p + strlen(str);
char *buf; while (*p)
{
buf = new char[100];
buf = parse(p,q,',');
printf("%s\n", buf);
delete []buf;
}
return 0;
}char *parse(char *p, char *q, char splitchar)
{
char *ret=p;
while (p<q)
{
if(*p=='\\') p+=2;
else
if(*p==splitchar)
{
*p='\0';
p++;
return ret;
}
else p++;
}
return ret;
}这个是我写的,但是不知道为什么不得到结果....
char *str = "70:0:汉字\,:1:1,340:0:李果:1:1,......,340:0:字符串:1:1";
里面有任意组由 ","分开的分成buf[0] = 70:0:汉字\,:1:1;
buf[1] = 340:0:李果:1:1;
...........
int main(int argc, char* argv[])
{
char *str = "70:0:汉字\,:1:1,340:0:李果:1:1";
char *p = str, *q = p + strlen(str);
char *buf; while (*p)
{
buf = parse(&p, q,',');
printf("%s\n", buf);
}
return 0;
}char *parse(char **p, char *q, char splitchar)
{
char *ret=*p;
while (*p<q)
{
if(**p=='\\') *p+=2;
else
if(**p==splitchar)
{
**p='\0';
*p++;
return ret;
}
else *p++;
}
return ret;
}这是我的代码,但是结果还是不对,希望那个高人来指点以下
char data[256][256] = {0};
int i = 0 ;
element = strtok(src, ",");
while(element != NULL)
{
strcpy(data[i++], element) ;
element = strtok(NULL, ",");
}
char data[256][256] = {0};
int i = 0 ;
element = strtok(src, ",");
while(element != NULL)
{
strcpy(data[i++], element) ;
element = strtok(NULL, ",");
}
如果是char src[] = "70:汉字\\,:1,0:李果:1,340:字符串:1" ;
这个结果就不是我想要的
70:汉字\\,:1为一组 0:李果:1和340:字符串:1为另外2组了
所以src[] = "70:汉字,:1,0:李果:1,340:字符串:1" ;
这个结果就不是我想要的
70:汉字\\,:1为一组 0:李果:1和340:字符串:1为另外2组了
========================
这里做以下更正还有我刚写完了....谢谢大家
[0:汉字\,:1,0:李果:1,340:字符串:1],"\\"不是给计算机看的,是给人看的。“如果是char src[] = "70:汉字\\,:1,0:李果:1,340:字符串:1" ;
这个结果就不是我想要的
70:汉字\\,:1为一组 0:李果:1和340:字符串:1为另外2组了”我猜测LZ的意思是要得到内存里面为[70:汉字\,:1]的数据,而实际上,你上面说的这个所得到的"70:汉字\\,:1"的字符串,内存里面就已经是[70:汉字\,:1]了。简单的讲,'\\'是一个字符[\]而不是两个字符[\\],你可以用printf("\\")来验证。
char sep[] =",";
char * token;
token = strtok(str,sep);
while (token != NULL)
{cout<<token<<endl;
token = strtok(NULL,sep);
}
int i = 0;
int t = 0;
char buf[256];
char *fin = new char[256];
int u = 0;
while (str[i] !='\0')
{
if(str[i] != ',')
{
buf[t++] = str[i++];
}
else
{
buf[t] ='\0';
strcpy(fin,buf);
u++;
t = 0;
i++;
cout<<fin<<endl;
}
}
不知道2种你需要的是什么样的