我能做什么,istringstream一个接一个地取字符串的元素而不是字符串本身? [英] What can I do so the istringstream takes the elements of the string one by one not the string itself?

查看:60
本文介绍了我能做什么,istringstream一个接一个地取字符串的元素而不是字符串本身?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题是istringstream一个接一个地取整个字符串而不是该字符串的元素,所以我从字符串缓冲区输入的int得到了数字溢出,因此i的值变为false



The problem is that istringstream takes the whole string not the elements of that string one by one and so the int that I input from the string buffer gets an overflow of the digits, so the value of "i" becomes false

<pre>#include <iostream>
#include <string>
#include <vector>
#include <sstream>


///NEXT STEPS
//1)conversion of numbers string matrix to int matrix is needed
std::vector<std::vector<int>>convert_to_iv(std::vector<std::vector<std::string>>sv) //multidimensional string vector
{
    std::vector<std::vector<int>>iv;
    for(const auto &row: sv)
    {
        iv.push_back(std::vector<int>());
        for(const auto &v: row)
        {
            std::istringstream ss(v);
            int i;
            ss>>i;
            iv.back().push_back(i);
        }
    }

    return iv;
}

std::vector<int>addition(std::vector<int>&left, std::vector<int>&right)
{
    int carry=0;
    if(left.size()==right.size())
    {
        for(int i=left.size()-1; i>=0; i--)
        {
            if(i==0)
            {
                left[i]=left[i]+right[i]+carry;
                break;
            }
            left[i]=(left[i]+right[i]+carry);
            carry=left[i]/10;
            left[i]=left[i]%10;

        }

    }
    if(left.size()>right.size())
    {
        int right_size=right.size()-1;
        for(int i=left.size()-1; i>=left.size()-right.size(); i--)
        {
            left[i]=left[i]+right[right_size]+carry;
            carry=left[i]/10;
            left[i]=left[i]%10;
            right_size--;
        }

        for(int i=right.size()-1; i>=0; i--)
        {
            left[i]=left[i]+carry;
        }
    }

    if(right.size()>left.size())
    {
        int left_size=left.size()-1;
        for(int i=right.size()-1; i>=right.size()-left.size(); i--)
        {
            right[i]=right[i]+left[left_size]+carry;
            carry=right[i]/10;
            right[i]=right[i]%10;
            left_size--;
        }
        for(int i=left.size()-1; i>=0; i--)
        {
            right[i]=right[i]+carry;
        }
    }

}

std::vector<int>get_sum(std::vector<std::vector<std::string>>sv)
{


    std::vector<int>left;
    std::vector<int>right;

    std::vector<std::vector<int>>iv;
    iv=convert_to_iv(sv);

    for(int col=0; col<50; col++)
    {
        left[col]=iv[0][col];
    }

    for(int row=1; row<100; row++)
    {
        for(int col=0; col<50; col++)
        {
            right[col]=iv[row][col];
        }
        addition(left, right);

    }
    //testing
    for(int i=0; i<left.size()-1; i++)
    {
        std::cout<<left[i]<<" ";
    }



}


int main()
{
    std::vector<int>left{};
    std::vector<int>right{};

    //75778645
    std::vector<std::vector<std::string>>number= {
            {"37107287533902102798797998220837590246510135740250"},
            {"46376937677490009712648124896970078050417018260538"},
            {"74324986199524741059474233309513058123726617309629"},
            {"91942213363574161572522430563301811072406154908250"},
            {"23067588207539346171171980310421047513778063246676"},
            {"89261670696623633820136378418383684178734361726757"},
            {"28112879812849979408065481931592621691275889832738"},
            {"44274228917432520321923589422876796487670272189318"},
            {"47451445736001306439091167216856844588711603153276"},
            {"70386486105843025439939619828917593665686757934951"},
            {"62176457141856560629502157223196586755079324193331"},
            {"64906352462741904929101432445813822663347944758178"},
            {"92575867718337217661963751590579239728245598838407"},
            {"58203565325359399008402633568948830189458628227828"},
            {"80181199384826282014278194139940567587151170094390"},
            {"35398664372827112653829987240784473053190104293586"},
            {"86515506006295864861532075273371959191420517255829"},
            {"71693888707715466499115593487603532921714970056938"},
            {"54370070576826684624621495650076471787294438377604"},
            {"53282654108756828443191190634694037855217779295145"},
            {"36123272525000296071075082563815656710885258350721"},
            {"45876576172410976447339110607218265236877223636045"},
            {"17423706905851860660448207621209813287860733969412"},
            {"81142660418086830619328460811191061556940512689692"},
            {"51934325451728388641918047049293215058642563049483"},
            {"62467221648435076201727918039944693004732956340691"},
            {"15732444386908125794514089057706229429197107928209"},
            {"55037687525678773091862540744969844508330393682126"},
            {"18336384825330154686196124348767681297534375946515"},
            {"80386287592878490201521685554828717201219257766954"},
            {"78182833757993103614740356856449095527097864797581"},
            {"16726320100436897842553539920931837441497806860984"},
            {"48403098129077791799088218795327364475675590848030"},
            {"87086987551392711854517078544161852424320693150332"},
            {"59959406895756536782107074926966537676326235447210"},
            {"69793950679652694742597709739166693763042633987085"},
            {"41052684708299085211399427365734116182760315001271"},
            {"65378607361501080857009149939512557028198746004375"},
            {"35829035317434717326932123578154982629742552737307"},
            {"94953759765105305946966067683156574377167401875275"},
            {"88902802571733229619176668713819931811048770190271"},
            {"25267680276078003013678680992525463401061632866526"},
            {"36270218540497705585629946580636237993140746255962"},
            {"24074486908231174977792365466257246923322810917141"},
            {"91430288197103288597806669760892938638285025333403"},
            {"34413065578016127815921815005561868836468420090470"},
            {"23053081172816430487623791969842487255036638784583"},
            {"11487696932154902810424020138335124462181441773470"},
            {"63783299490636259666498587618221225225512486764533"},
            {"67720186971698544312419572409913959008952310058822"},
            {"95548255300263520781532296796249481641953868218774"},
            {"76085327132285723110424803456124867697064507995236"},
            {"37774242535411291684276865538926205024910326572967"},
            {"23701913275725675285653248258265463092207058596522"},
            {"29798860272258331913126375147341994889534765745501"},
            {"18495701454879288984856827726077713721403798879715"},
            {"38298203783031473527721580348144513491373226651381"},
            {"34829543829199918180278916522431027392251122869539"},
            {"40957953066405232632538044100059654939159879593635"},
            {"29746152185502371307642255121183693803580388584903"},
            {"41698116222072977186158236678424689157993532961922"},
            {"62467957194401269043877107275048102390895523597457"},
            {"23189706772547915061505504953922979530901129967519"},
            {"86188088225875314529584099251203829009407770775672"},
            {"11306739708304724483816533873502340845647058077308"},
            {"82959174767140363198008187129011875491310547126581"},
            {"97623331044818386269515456334926366572897563400500"},
            {"42846280183517070527831839425882145521227251250327"},
            {"55121603546981200581762165212827652751691296897789"},
            {"32238195734329339946437501907836945765883352399886"},
            {"75506164965184775180738168837861091527357929701337"},
            {"62177842752192623401942399639168044983993173312731"},
            {"32924185707147349566916674687634660915035914677504"},
            {"99518671430235219628894890102423325116913619626622"},
            {"73267460800591547471830798392868535206946944540724"},
            {"76841822524674417161514036427982273348055556214818"},
            {"97142617910342598647204516893989422179826088076852"},
            {"87783646182799346313767754307809363333018982642090"},
            {"10848802521674670883215120185883543223812876952786"},
            {"71329612474782464538636993009049310363619763878039"},
            {"62184073572399794223406235393808339651327408011116"},
            {"66627891981488087797941876876144230030984490851411"},
            {"60661826293682836764744779239180335110989069790714"},
            {"85786944089552990653640447425576083659976645795096"},
            {"66024396409905389607120198219976047599490197230297"},
            {"64913982680032973156037120041377903785566085089252"},
            {"16730939319872750275468906903707539413042652315011"},
            {"94809377245048795150954100921645863754710598436791"},
            {"78639167021187492431995700641917969777599028300699"},
            {"15368713711936614952811305876380278410754449733078"},
            {"40789923115535562561142322423255033685442488917353"},
            {"44889911501440648020369068063960672322193204149535"},
            {"41503128880339536053299340368006977710650566631954"},
            {"81234880673210146739058568557934581403627822703280"},
            {"82616570773948327592232845941706525094512325230608"},
            {"22918802058777319719839450180888072429661980811197"},
            {"77158542502016545090413245809786882778948721859617"},
            {"72107838435069186155435662884062257473692284509516"},
            {"20849603980134001723930671666823555245252804609722"},
            {"53503534226472524250874054075591789781264330331690"}

    };

    get_sum(number);

}





我的尝试:



我试图通过索引来解决行问题(不是通过for-each循环),但结果是一样的。



What I have tried:

I have tried to address "row"s by indexing(not by for-each loop) but the result is the same.

推荐答案

所有这些数字都太大而不是普通的整数。对于无符号整数,有符号整数的最大值为2,147,483,647或4,294,967,295。
All those numbers are far too big to be ordinary integers. The maximum value for a signed integer is 2,147,483,647, or 4,294,967,295 for an unsigned.


这篇关于我能做什么,istringstream一个接一个地取字符串的元素而不是字符串本身?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆