2015-12-27 42 views
3

我一直在試圖讀取兩個數字作爲字符串,將它們轉換成int向量,然後將它們添加到我的實驗室在學校。我曾嘗試加入1 + 1發現此錯誤:試圖添加兩個整數,但矢量錯誤

Debug Assertion Failed!

Program: C:\windows\SYSTEM32\MSVCP140D.dll File: c:\program files (x86)\microsoft visual studio 14.0\vc\include\xstring Line: 1681

Expression: vector subscript out of range

For more information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

我曾嘗試重試,但它開闢了另一個對話框,指出調試到斷點,在這一點上,我不能繼續調試。這是我對於那些你感興趣的代碼(微軟的Visual Studio編譯器):

#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

void input(string &largeString1, string &largeString2); 
void convert(string largeString1, string largeString2, vector<int> &largeInt1, vector<int> &largeInt2); 
int asciiToInt(char ch); 
void add(vector<int> largeInt1, vector<int> largeInt2, vector<int> &finalInt); 
void output(const vector<int> finalInt); 

int main() 
{ 
    string largeString1; 
    string largeString2; 
    vector<int> largeInt1(12, 0); 
    vector<int> largeInt2(12, 0); 
    vector<int> finalInt(13, 0); 

    for (int i = 0; i < 4; i++) 
    { 
     input(largeString1, largeString2); 
     convert(largeString1, largeString2, largeInt1, largeInt2); 
     add(largeInt1, largeInt2, finalInt); 
     output(finalInt); 
    } 

    system("pause"); 

    return 0; 
} 
void input(string &largeString1, string &largeString2) 
{ 
    cout << "Input:" << endl << endl; 
    cin >> largeString1; 
    cin >> largeString2; 
} 
void convert(string largeString1, string largeString2, vector<int> &largeInt1, vector<int> &largeInt2) 
{ 
    int size1 = size(largeString1); 
    int size2 = size(largeString2); 
    for (int i = 0; i < 12; i++) 
    { 
     int dynamicsize1 = size1 - i; 
     largeInt1[11 - i] = asciiToInt(largeString1[dynamicsize1 ]); 
    } 
    for (int j = 0; j < 12; j++) 
    { 
     int dynamicsize2 = size2 - j; 
     largeInt2[11 - j] = asciiToInt(largeString2[dynamicsize2 ]); 
    } 
} 
int asciiToInt(char ch) 
{ 
    return (ch - '0'); 
} 
void add(vector<int> largeInt1, vector<int> largeInt2, vector<int> &finalInt) 
{ 
    for (int i = 0; i < 12; i++) 
    { 
     if (largeInt1[11 - i] + largeInt2[11 - i] >= 10) 
     { 
      finalInt[12 - i] = finalInt[12 - i] + largeInt1[11 - i] + largeInt2[11 - i] - 10; 
      finalInt[12 - i - 1] = 1; 
     } 
     else 
      finalInt[12 - i] = finalInt[12 - i] + largeInt1[11 - i] + largeInt2[11 - i]; 
    } 
} 
void output(const vector<int> finalInt) 
{ 
    cout << endl << "Output:" << endl << endl << "The sum is: "; 
    for (int i = 0; i < 13; i++) 
    { 
     cout << finalInt[i]; 
    } 
    cout << endl << endl; 
} 
+0

我也不太清楚,但我想我的問題可能在於在我的添加或轉換函數,但我不知道究竟出了什麼問題:( – e7kim

+1

而不是'convert'轉換這兩個字符串,讓它只轉換一個字符串,並調用它兩次(使用不同的參數) –

+0

哪條線的代碼會導致斷言(查看調用堆棧)?它嘗試訪問哪個字符串的元素,該字符串有多少個元素? –

回答

1

利用你的字符串轉換:

void convert(string largeString1, string largeString2, vector<int> &largeInt1, vector<int> &largeInt2) 
{ 
    int size1 = largeString1.size(); 
    int size2 = largeString2.size(); 
    for (int i = 0; i < size1; i++) 
    { 
     largeInt1[11 - i] = asciiToInt(largeString1[size1-1-i]); 
    } 
    for (int j = 0; j < size2; j++) 
    { 
     largeInt2[11 - j] = asciiToInt(largeString2[size2-1-j]); 
    } 
}