如何从右手边到左手边使用substr?如何将每个8个字符从字符串转换为int?

时间:2015-03-25 05:57:26

标签: c++

我有这段代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int i=o;
    string str="12345678910111213141516171819202122232425262728293";
    while(i<str.length())
     {
       cout<<str.substr(i,8)<<endl;
       i=i+8;
       return 0;
      }

/我的输出是:12345678                     91011121                     31415161                     ....... 我想从右到左而不是从左到右获得8个字符。然后,每个接收的8个字符需要插入整数变量。请问,有人可以帮忙吗? /

3 个答案:

答案 0 :(得分:1)

不确定我完全理解这个问题...... 但是如果你想要最后八个字符可以使用:

str.substr( str.length() - 8, 8 );

要将字符串转换为int,您可以使用:

#include <cstdlib>

int i = atoi( str.c_str() );

或者将角色转换为可以使用的int:

int i = str[ 0 ] - '0';

答案 1 :(得分:1)

首先使用mod %运算符打印剩余字符。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str="12345678910111213141516171819202122232425262728293";
    std::size_t sz = str.size();
    std::size_t i = 0;

    if(sz % 8) {
        cout<<str.substr(i, sz % 8) << ' ' ;
        i += sz % 8;
    }    
    while(i<str.length())
    {
       cout << str.substr(i,8) << ' ';
       i = i+8;
    }
    cout << endl;
    return 0;
}

Live demo here

现在,您可以使用std::stringstreamstd::stoi将这些字符串转换为数字。

int strToNum(const string &str)
{
    std::stringstream sstr(str);
    int ret;
    if( sstr >> ret ) {
        return ret;
    } else {
        // Error handling
        throw str + " is not an integer";
    }
}

答案 2 :(得分:0)

要从最后8位数字创建子字符串,请使用string::length

str.substr(str.length() - 8, 8)

然后,要将该子字符串转换为int,请使用stoi

int i = stoi(str.substr(str.length() - 8, 8));