0

所以对于我的代码,我想将一个参数传递给一个函数,如果它不返回 true,我希望它传递 int 数组中的下一个索引数字。

所以如果 areaIntA[0] = 0; 不返回 true,我希望它通过 areaIntA[0][1] = 01; 如果不返回 true,areaIntA[0][1][2] = 012; ETC...

我更新的代码:

areaInt = areaIntA[0];

do {
    areaCheck = isRegistered(file, areaInt);
    if (areaCheck != 1)
    {
    areaInt = areaIntA[i] * 10 + areaIntA[i+1];
    i++;
    }
} while (areaCheck != 1);

cout << areaCheck << endl;

这编译但它显示一个分段错误,有人知道为什么吗?

4

3 回答 3

0

让函数接受一个列表(向量)。每次调用都在末尾添加一个新元素。

例如。

List< int?> areaIntList;

do {
    areaIntList.Add(areaInt[i]);
    areaCheck = isRegistered(file, areaInt[i]);
    if (areaCheck != 1)
    {
        i++;
    }
} while (areaCheck != 1);

isRegistered 接受您使用的类型的列表。

于 2013-02-07T04:13:11.527 回答
0

我对你的问题的理解是这样的:

  1. isRegistered是一个函数,它接受一个文件和一个可变长度的数字字符串,1如果字符串已注册,则返回,0否则返回。
  2. areaInt是一个 C 风格的字符串,如"31526".
  3. 你想要的是看是否"3"被注册;如果没有,看是否"31"注册;如果没有,请尝试"315"等,直到 的所有数字areaInt都用完。
  4. 最终结果应该是一个areaInt注册字符串最短的子字符串,如果没有找到注册字符串,则返回错误。

我就是这样做的。

  1. 如果输入字符串areaInt为空,则返回错误。
  2. 将计数器从 1 循环i到字符串的长度:
    1. s从 中的第一个i字符构造一个测试字符串areaInt
    2. 测试是否s注册。如果是,则跳出循环并返回s。如果没有,继续循环。
  3. 如果循环在末尾完成areaInt并且没有找到已注册的字符串,则返回错误。

笔记。确保在结束时停止areaInt。否则,如果您到了末尾,areaInt仍然没有找到已注册的字符串,那么您将溢出缓冲区并尝试读取不在字符串中的元素。

于 2013-02-07T04:30:41.220 回答
0

您在某种字符串上下文中奇怪地将数组整数值等同起来。这通常意味着以 10 为底的数学。

尝试:

int val = 0;
do {
    val = 10 * val + areaInt[i];
    areaCheck = isRegistered(file, val);
    if (areaCheck != 1)
        i++;
} while (areaCheck != 1);

在第一次通过时,val将是areaInt[0]; 在第二遍时,它将areaInt[0]紧随其后areaInt[1](例如,0 和 1 变为 1,1 和 2 变为 12)。等等。

于 2013-02-07T04:20:18.850 回答