请教sscanf的用法,谢谢

freegoal 2003-06-02 11:05:35
我有这样的一个字符串,"typeid|engstr|gbstr|big5str|",其中包含了四个以 '|'隔开的子字符串,如何能否很方便的获取这四个字符串?,我用下面这个语句,可是不行

_stscanf(svOne, _T("%s|%s|%s|%s|"), svID, svEn, svGb, svB5);


请问如何做?
...全文
56 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzb1000 2003-06-06
  • 打赏
  • 举报
回复
大开眼界
howard_sz 2003-06-06
  • 打赏
  • 举报
回复
[^|] 表示不接收'|'字符,遇到'|’就会结束
[^|]| 表示不接收'|'字符,但遇到'|’不会结束
freegoal 2003-06-02
  • 打赏
  • 举报
回复
to howard_sz(frank):

非常感谢,你的方法果然可以。能否详细解释一下这些字符的意义?谢谢
howard_sz 2003-06-02
  • 打赏
  • 举报
回复
char string[] = "typeid|engstr|gbstr|big5str|";

sscanf(string,"%[^|]|%[^|]|%[^|]|%[^|]|s",str1,str2,str3,str4);
howard_sz 2003-06-02
  • 打赏
  • 举报
回复
char string[] = "typeid|engstr|gbstr|big5str|";

sscanf(string,"%[^|]|%[!|]|%[^|]|%[!|]|s",str1,str2,str3,str4);
zw741027 2003-06-02
  • 打赏
  • 举报
回复
都是字符串,没有办法通过%s|%s...实现拆分,自己写个split函数,将结果集拆到数组中去

char destgrp[10][10];
static int splitstr(char subchar, char *psStr, char *pdstr, int subsize)
{
char *ptmp = psStr, *ptmp1;
int substrlen, icount = 0;

while ((ptmp1 = strchr(ptmp, subchar)) != NULL)
{
substrlen = ptmp1 - ptmp;
memcpy((void *)&pdstr[subsize * icount]
, (const void *)ptmp
, (size_t)MIN(substrlen, subsize));
ptmp = ptmp1 + 1; /* add sizeof(char) */
icount += 1;
}
substrlen = strlen(ptmp);
memcpy((void *)&pdstr[subsize *icount], (const void *)ptmp
, (size_t)MIN(substrlen, subsize));
icount += 1;
return icount;
}

splitstr('|', 源串,destgrp, 10);
idontlikenickname 2003-06-02
  • 打赏
  • 举报
回复


sigh~~~怎么老是这类问题?

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

char string[] = "typeid|engstr|gbstr|big5str|";
char seps[] = "|";
char *token;

void main( void )
{
token = strtok( string, seps );
while( token != NULL )
{
printf( "%s\n", token );
token = strtok( NULL, seps );
}
}

typeid
engstr
gbstr
big5str

pzytony 2003-06-02
  • 打赏
  • 举报
回复
先用fgets()读一行下来。
逐个找"|"
freegoal 2003-06-02
  • 打赏
  • 举报
回复
help

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧