请帮忙拆分一个字符串

人生无悔 2014-12-30 09:21:28
LPCTSTR printTxt="^FO150,50^A0,32,32^FDLight Engine^FS^FO150,100^A0,32,32^FDLight Engine^FS^FO150,150^A0,32,32^FDLight Engine^FS"

拆分的结果为(即每个^FS为一句):
^FO150,50^A0,32,32^FDLight Engine^FS
^FO150,100^A0,32,32^FDLight Engine^FS
^FO150,150^A0,32,32^FDLight Engine^FS

谢谢!
...全文
239 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
michael2988 2014-12-30
  • 打赏
  • 举报
回复

int  main(int argc, char* argv[])
{
    char s[] = "^FO150,50^A0,32,32^FDLight Engine^FS^FO150,100^A0,32,32^FDLight Engine^FS^FO150,150^A0,32,32^FDLight Engine^FS";
    char res[260];
    char *prev = s;
    char *cur = strstr(prev, "^FS");
    while (NULL != cur)
    {
        strncpy(res, prev, cur - prev);
        res[cur - prev] = '\0';
        strcat(res, "^FS");
        std::cout << res << std::endl;
        cur += 3;
        prev = cur;
        cur = strstr(prev, "^FS");
    }
    std::system("pause");
    return 0;
}
赵4老师 2014-12-30
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <tchar.h>
typedef const TCHAR *LPCTSTR;
LPCTSTR printTxt=_T("^FO150,50^A0,32,32^FDLight Engine^FS^FO150,100^A0,32,32^FDLight Engine^FS^FO150,150^A0,32,32^FDLight Engine^FS");
#define MAXSUBLEN 256 //每个子串的最大长度
#define MAXSUBSTR 100 //最多子串数
TCHAR s[MAXSUBSTR][MAXSUBLEN];
TCHAR *p,*p1;
int i,n,L;
int main() {
    i=0;
    p1=(TCHAR *)printTxt;
    while (1) {
        p=_tcsstr(p1,_T("^FS"));
        if (NULL==p) break;
        L=__min(MAXSUBLEN-1,p-p1+_tcslen(_T("^FS")));
        _tcsncpy(s[i],p1,L);s[i][L]=0;
        p1=p+_tcslen(_T("^FS"));
        i++;
        if (i>=MAXSUBSTR) break;
    }
    n=i;
    for (i=0;i<n;i++) {
        _tprintf(_T("%s\n"),s[i]);
    }
    return 0;
}
//^FO150,50^A0,32,32^FDLight Engine^FS
//^FO150,100^A0,32,32^FDLight Engine^FS
//^FO150,150^A0,32,32^FDLight Engine^FS
//
图灵狗 2014-12-30
  • 打赏
  • 举报
回复

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

int main(int argc, char* argv[])
{
    char str[] = "^FO150,50^A0,32,32^FDLight Engine^FS^FO150,100^A0,32,32^FDLight Engine^FS^FO150,150^A0,32,32^FDLight Engine^FS";
    char *p; 
    
    p = strtok(str, "S");
    while(p)
    {   
        printf("%sS\n", p);   
        p = strtok(NULL, "S");   
    }
    
    return 0;
}
人生无悔 2014-12-30
  • 打赏
  • 举报
回复
如果是单个符号分隔就知道怎么处理的,如下,不过要以^FS分隔我就不会了,谁可以帮我写下,多谢!



幻夢之葉 2014-12-30
  • 打赏
  • 举报
回复
引用 3 楼 zhangandli 的回复:
[quote=引用 2 楼 jacksonfan 的回复:] 查找子串^FO150,相邻2个就分割出来
只有^FS是固定的,不知怎么分,可否帮拆分下,谢谢![/quote] 1L
人生无悔 2014-12-30
  • 打赏
  • 举报
回复
引用 2 楼 jacksonfan 的回复:
查找子串^FO150,相邻2个就分割出来
只有^FS是固定的,不知怎么分,可否帮拆分下,谢谢!
jacksonfan 2014-12-30
  • 打赏
  • 举报
回复
查找子串^FO150,相邻2个就分割出来
羽飞 2014-12-30
  • 打赏
  • 举报
回复
施主,这个就是一个很普通的拆分字符串,可以用strstr查找分割的字符串,然后进行分割 http://www.cplusplus.com/reference/cstring/strstr/?kw=strstr

64,267

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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