C++中如何从路径字符串中获取文件名!

如题,最好是能直接从标准库的字符串中获取,实在没有其他的也行...如图,路径字符串,一个std::stringpath;怎么冲path中获取world或者world.sh... 如题,最好是能直接从标准库的字符串中获取,实在没有其他的也行...

如图,路径字符串,一个std::string path;怎么冲path中获取 world或者world.shp
展开
 我来答
冰火梦幻
推荐于2017-04-17 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:425万
展开全部

C风格:

char *p = strrchr(path.c_str(), '/')

p是path里最后一个'/'的地址。然后

string s(p + 1);

,s就是"world.shp"了。


C++风格:

int pos = path.find_last_of('/');

pos就是最后一个'/'的下标。

然后

string s(path.substr(pos + 1) );

s就是"world.shp"了。

菜刀撒
2014-01-08 · TA获得超过313个赞
知道小有建树答主
回答量:487
采纳率:0%
帮助的人:276万
展开全部
//将字符串根据给定分隔符分割成多个子字符串
//strLine 要分割的字符串
//cDelimiter 分割字符
//strArray string数组用来存放分割好的字符串
int ParseSubStrByDelimiter(string strLine, char cDelimiter, string* strArray)
{
    int nSeparator = -1;
    int nNextSeparator = -1;
    int nStrLen = strLine.length();
    int nStrArraySize = 0;
    int i = 0;
    
    //strLine replace '\t' to ' '
int nIndex = strLine.find('\t', 0);
while(nIndex >= 0)
{
strLine.replace(nIndex, 1, " ");
nIndex = strLine.find('\t', 0);
}

int nCommaPos = strLine.find(',');
    int nSemicolonPos = strLine.find(';');
    if (nCommaPos < 0 && nSemicolonPos < 0)
    {
        cDelimiter = '/';
    }
 
    switch (cDelimiter)
    {
    case '/ ':
        for (i = 0; i < nStrLen;)
        {
            if (strLine.at(i) != cDelimiter)
            {
                nSeparator = i;
                nNextSeparator = strLine.find(cDelimiter, nSeparator + 1);
                if (nNextSeparator < 0)
                {
                    strArray[nStrArraySize++] = strLine.substr(nSeparator, nStrLen - 1);
                    break;
                }
                strArray[nStrArraySize++] = strLine.substr(nSeparator, nNextSeparator-nSeparator);
                
                i = nNextSeparator;
                if (i >= nStrLen)
                {
                    break;
                }
            }
            else
            {
                i++;
            }
        }
        break;
        
    case ',':
    case ';':
        for (i = 0; i < nStrLen;)
        {
            if (i == 0)
            {
                if (strLine.at(i) == cDelimiter)
                {
                    strArray[nStrArraySize++] = "";
                    nSeparator = i;
                }
                else
                {
                    nSeparator = strLine.find(cDelimiter, nSeparator + 1);
                    if (nSeparator < 0)
                    {
                        break;
                    }
                    strArray[nStrArraySize++] = strLine.substr(0, nSeparator);
                }
                
                i = nSeparator;
            }
            else
            {
                nSeparator = i;
                nNextSeparator = strLine.find(cDelimiter, nSeparator + 1);
                if (nNextSeparator < 0)
                {
                    strArray[nStrArraySize++] = strLine.substr(nSeparator + 1, nStrLen - nSeparator - 1);
                    break;
                }
                
                if (nNextSeparator == nSeparator + 1)
                {
                    strArray[nStrArraySize++] = "";
                }
                else
                {
                    strArray[nStrArraySize++] = strLine.substr(nSeparator + 1, nNextSeparator - nSeparator - 1);
                }
                
                i = nNextSeparator;
            }
        }
        break;
    default:
        break;
    }
    return nStrArraySize;
}

对于你这个字符串而言这么用

string strArray[15];

int Arraysize= ParseSubStrByDelimiter(strline,'/',strArray);

strArray[Arraysize-1]就是你要的

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xtfpg
2014-01-08
知道答主
回答量:28
采纳率:100%
帮助的人:11.5万
展开全部
PathFindFileName("D:\OSGEarth2.4/data/world.shp") 可以直接返回 world.shp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leafsax
2014-01-08 · TA获得超过134个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:121万
展开全部
find_last_of("/") + substring()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式