Что я могу сделать, чтобы istringstream принимал элементы строки один за другим, а не саму строку?
Проблема заключается в том, что istringstream принимает всю строку, а не элементы этой строки один за другим, и поэтому int, который я ввожу из строкового буфера, получает переполнение цифр, поэтому значение "i" становится ложным
<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), но результат тот же самый.
Jochen Arndt
Элементами строки являются символы. Если вы хотите обработать их, вам придется перебирать строковые элементы.
Если строка содержит список целых чисел, разделенных определенными разделителями, вы должны разделить (маркировать) строку и преобразовать каждый элемент в int.
Member 13277493
да, это символы, и istringstream-один из способов(если не единственный) получить целые числа из строки. В этом случае строка не содержит специального разделителя.