首页 > 试题广场 >

写一个函数,转换相对路径为绝对路径,比如:homeabs

[问答题]
写一个函数,转换相对路径为绝对路径,比如:/home/abs/../temp/new/../,输出路径为:/home/temp。
推荐
/* 写一个函数,转换相对路径为绝对路径,比如:/home/abs/../temp/new/../,输出路径为:/home/temp。 */
int RP2AP( const char* pInStr, char* pOutStr )
{
    if ( pInStr == NULL || pOutStr == NULL )
        return(0);

    string    str = pInStr;
    string    strTemp;
    vectorvec_str;
    string strOut = "";

    int    nPos1;
    int    nPos2;

    nPos1 = str.find( "/", 0 );
    if ( nPos1 < 0 )
    {
        return(-1);
    }

    while ( 1 )
    {
        nPos2 = str.find( "/", nPos1 + 1 );
        if ( nPos2 > nPos1 )
        {
            strTemp = str.substr( nPos1, nPos2 - nPos1 );
/* 如果不是/..,就放入vector里 */
            if ( strTemp != "/.." )
                vec_str.push_back( strTemp );
            else{ /* 弹出上一个 */
                vec_str.reserve( vec_str.size() );
                vec_str.pop_back();
                vec_str.reserve( vec_str.size() );
            }
            nPos1 = nPos2;
        }else  {
            break;
        }
    }

/* 循环赋值累加 */
    for ( int i = 0; i {
              strOut += vec_str[i];
          }

/* 这里用strOut.c_str(),要安全一些,有的环境不这样写编译都不过。 */
          memcpy( pOutStr, strOut.c_str(), strOut.size() );

          return(1);
          }

          int main()
          {
              int n = 10;
/* char a[] = "/home/abs/../temp/new/../"; */
              char a[] = "/home/abs/temp/new/../";

              char b[256];

              memset( b, 0, 256 );
              int nRet = RP2AP( a, b );

              if ( nRet == 1 )
                  cout << b << endl;

              system( "pause" );
              return(0);
          }


编辑于 2015-02-04 16:24:58 回复(0)