我刚刚开始学习如何使用指针数组,并且我尝试了一些示例以了解更多关于它们但我很容易与它们混淆。所以,我尝试使用指针数组进行简单的算术计算。
用户将输入2个字符串变量以进行添加。然后我反转字符串变量。
string reverseString(string s1)
{
int i = 0;
int j;
char temp;
j = s1.length() - 1;
while (i < j)
{
temp = s1[i];
s1[i] = s1[j];
s1[j] = temp;
i++;
j--;
}
return s1;
}
我尝试将两个字符串变量转换为整数指针数组,然后再将它们组合在一起
void stringtoInt(string& s1, string& s2)
{
int size1 = s1.size();
int size2 = s2.size();
intPtr intArray;
intPtr intArray2;
intArray = new int[size1];
intArray2 = new int[size2];
for (int i = 0; i < size1; i++)
{
intArray[i] = s1[i] - '0';
}
for (int i = 0; i < size2; i++)
{
intArray2[i] = s1[i] - '0';
}
addInteger(intArray, intArray2);
}
我在一个函数中传入了2个整数数组,并尝试进行一些加法计算
void addInteger(intPtr intArray, intPtr intArray2)
{
int *p = intArray;
int *q = intArray2;
intPtr total = new int[MAX];
int i = 0;
int sum = 0;
int carried = 0;
while (*p != '\0' || *q != '\0')
{
*(total + i) = *p + *q + carried;
if(*(total + i) > 9)
{
*(total + i) %= 10;
carried = 1;
}
else
carried = 0;
i++;
p++;
q++;
}
printArray(total, i);
}
这就是我读指针数组的方法
void printArray(intPtr total, int size)
{
for(int i = 0; i < size; i++)
cout << *(total + i);
}
在尝试调试此指针整数数组后,我仍然无法弄清楚它们有什么问题,我刚开始学习如何使用指针整数数组。
答案 0 :(得分:2)
问题是如何使用字符串中的字符串终止符并将它们放入整数数组中。
字符串终止符为'\0'
,等于零。这意味着当您执行'\0' - '0'
时,结果为ASCII encoding} 0 - 48
。这不是你想象的值。
这意味着在addInteger
函数中,您可以检查整数数组中的'\0'
字符,这可能会超出范围。这会导致未定义的行为。
或者,如果任何整数数组中存在实际零,则将停止短路。
无论哪种方式,你都会得到错误的结果。
您不能将字符串终止符用作整数数组的终止符。您需要使用字符串中的实际大小并检查它。或者,就像我在评论中提到的那样,使用适当的C ++容器和迭代器(或索引)。
答案 1 :(得分:0)
替换:
j = s1.length();
使用:
j = s1.length()-1;
字符串的最后一个字符位于length-1
,而不是length
。
此外,在stringtoInt
中,您无法复制终止&#39; \ 0&#39;到intArray1
和intArray2
,所以这个条件:
while (*p != '\0' || *q != '\0')
addInteger
中的错误。将大小从stringtoInt
传递到addInteger
,并将while
循环替换为该大小的for
循环。