我一直在試圖讀取兩個數字作爲字符串,將它們轉換成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;
}
我也不太清楚,但我想我的問題可能在於在我的添加或轉換函數,但我不知道究竟出了什麼問題:( – e7kim
而不是'convert'轉換這兩個字符串,讓它只轉換一個字符串,並調用它兩次(使用不同的參數) –
哪條線的代碼會導致斷言(查看調用堆棧)?它嘗試訪問哪個字符串的元素,該字符串有多少個元素? –