加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从整数值返回固定长度的std :: string

发布时间:2020-12-16 06:45:58 所属栏目:百科 来源:网络整理
导读:问题 – 将固定长度字符串返回到std :: string *. 目标机器 – Fedora 11. 我必须派生一个函数,它接受整数值并将固定的长度字符串返回给字符串指针; 例如 – int值的范围为0到-127 所以对于int值0 – 它应该显示000 对于值-9 – 它应该返回-009 值为-50 –
问题 – >将固定长度字符串返回到std :: string *.
目标机器 – > Fedora 11.

我必须派生一个函数,它接受整数值并将固定的长度字符串返回给字符串指针;
例如 – > int值的范围为0到-127

所以对于int值0 – >它应该显示000
对于值-9 – >它应该返回-009
值为-50 – >它应该返回-050
值为-110 – >它应该返回-110

所以简而言之,在所有情况下,长度应该相同.

我做了什么:我已经根据下面的要求定义了这个功能.

我需要帮助的地方:我已经派生了一个函数,但我不确定这是否是正确的方法.当我在Windows端的独立系统上测试它时,exe有时会停止工作,但是当我在Linux机器上包含这个功能和整个项目时,它可以完美地工作.

/* function(s)to implement fixed Length Rssi */
 std::string convertString( const int numberRssi,std::string addedPrecison="" )
 {
     const std::string         delimiter   =   "-";
                stringstream   ss;

     ss  << numberRssi ;
     std::string tempString = ss.str();
     std::string::size_type found = tempString.find( delimiter );
     if( found == std::string::npos )// not found
     {
         tempString = "000";
     }
     else
     {
         tempString = tempString.substr( found+1 );
         tempString = "-" +addedPrecison+tempString ;
     }
     return  tempString;

 }

 std::string stringFixedLenght( const int number )
 {
     std::string str;
     if( (number <= 0) && (number >= -9) )
       {
           str = convertString( number,"00");
       }
       else if( (number <= -10) && (number >= -99) )
       {
           str = convertString( number,"0");
       }
       else
       {
           str= convertString(number,"");
       }
     return str;
 }
// somewhere in the project calling the function
ErrorCode A::GetNowString( std::string macAddress,std::string *pString )
{
    ErrorCode result = ok;
    int lvalue;
    //some more code like iopening file and reading file 
    //..bla
    // ..bla     
    // already got the value in lvalue ;

    if( result == ok )
    {
         *pString = stringFixedLenght( lValue );
    }

    // some more code

    return result;

}

解决方法

我没有反对使用流的版本,但你可以比你的代码更简单地完成所有这些:

std::string fixedLength(int value,int digits = 3) {
    unsigned int uvalue = value;
    if (value < 0) {
        uvalue = -uvalue;
    }
    std::string result;
    while (digits-- > 0) {
        result += ('0' + uvalue % 10);
        uvalue /= 10;
    }
    if (value < 0) {
        result += '-';
    }
    std::reverse(result.begin(),result.end());
    return result;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读