首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C语言 截取文本 中 的 引号之间的单词 或者是 汉字 有什么好办法? [已结贴,结贴人:xxxiaoxiami]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 20:16:18 楼主
    之前曾发过一个帖子 问的是关于 :我爱背单词,这个dos环境下 的背单词程序,在很多人 的指导下 我的 思路现在已经非常清晰了
    但是具体到细节上 还哟一些很核心的问题没有解决!
    5 "a bit of" "一点" 0
    型如上,
    就是说 怎么方便快捷的截取 两对引号之间的 单词或者是汉字,然后保存到数组中去?
    (存储信息,我定义的是结构体数组)
    这是这个程序的关键 可是 我至今还没有找到一个合适的方法来
    所以还要在这里麻烦大家 给出处主意!
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-07-24 20:25:271楼 得分:5
    直接在字符串中查找"号,找到后继续查找接下来的"号,两个引号见为所需要的字符串。
    重复此过程直到结束。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 20:35:422楼 得分:5
    #include "stdio.h"

    int main()
    {
    char buf[]="\"adsfasdf\"fasdf\"sdfasdf\"dsfasdfa\"dsfasd\"";
    int i=0;
    int Qua=0;
    while(buf[i])
    {
    if(buf[i]=='\"')
    Qua=(Qua+1)%2;
    if(Qua&&buf[i]!='\"')
    printf("%c",buf[i]);
    i++;
    }
    return 0;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-07-24 20:43:523楼 得分:5
    C/C++ code
    TCHAR *szTest = _T("5 \"a bit of\" \"一点\" 0 "); TCHAR *p1 = szTest, *p2 = NULL; while ( p1 = _tcschr(p1, _T('\"')) { p2 = _tcschr(p1, _T('\"')); if (p2) { TCHAR *pWord = new TCHAR[p2-p1 + 1]; // 单词 _tcscpyn(pWord, p1, p2-p1); // 使用完记得delete p1 = p2 +1; } else { break; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-07-24 20:45:184楼 得分:3
    引用 3 楼 dbger 的回复:
    C/C++ codeTCHAR*szTest=_T("5 \"a bit of\" \"一点\" 0");

    TCHAR*p1=szTest,*p2=NULL;while( p1=_tcschr(p1, _T('\"'))
    {
        p2=_tcschr(p1, _T('\"'));if(p2)
        {
            TCHAR*pWord=newTCHAR[p2-p1+1];//单词_tcscpyn(pWord, p1, p2-p1);//使用完记得deletep1=p2+1;
        }else{break;
        }
    }


    _tcscpyn->tcsncpy
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-07-24 20:45:485楼 得分:1
    _tcscpyn->_tcsncpy
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 20:49:406楼 得分:1
    用ssanf或者fscanf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 22:55:347楼 得分:1
    使用strtok
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 23:18:568楼 得分:5
    c#里面有个split函数可以实现这个功能
    这个是用C++写的split函数


    //+------------str is the String that will be split---------------+//
    //+------------bystr is the string by which to split str----------+//
    //+------------str_array is the array to save splited str---------+//
    void split(const CString str,const CString bystr,CStringArray *str_array)
    {
    int nLen = bystr.GetLength();
    int preLoc = 0;
    int nowLoc = 0;
    while(true)
    {
    nowLoc = str.Find(bystr,preLoc);
    if(nowLoc == -1&&preLoc == 0)
    {
    CString substr3=str;
    str_array->Add(substr3);
    break;
    }
    if(nowLoc == -1&&preLoc != 0)
    {
    CString substr2=str.Mid(preLoc);
    str_array->Add(substr2);
    break;
    }
    CString substr = str.Mid(preLoc,nowLoc-preLoc);
    str_array->Add(substr);
    preLoc=nowLoc + nLen;
    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 23:23:259楼 得分:4
    最好还是用分割之类的函数和sscanf结合
    因为单词行可能是动态的,可以先分割成自己指定的顺序,然后再用sscanf割
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved