例如,
我有一个字符串:7364jruf62
我还有一个动态的二维数组:(7,4f6,73,2)
我需要遍历字符串并从数组中找到最长匹配的字符串(字符串中的7个字符串可以与数组中的7匹配,但73表示更好的匹配,因为它的2个数字)。然后转到字符串的其余部分,尝试从数组中查找匹配项(因为73是我们现在在字符串中搜索64jruf62的最佳匹配)。
数组是动态的原因是我可以在最后添加字符串的匹配值。
我试图用
循环执行此操作for (i = 1; i <= numberOfStrsInArray; i++) {
count = 0;
shift = 0;
while (string[shift] == array[i][count]) {
shift++;
count++;
但是,这不起作用,而程序因此而崩溃。有人能告诉我为什么这会导致我的程序崩溃或为我试图做的事情提出更好的解决方案吗?谢谢。如果我提供的片段不清楚,我可以从我的程序中提供更多代码。
答案 0 :(得分:0)
由于您在这里处理char数组,因此使用strstr
而不是比较一个更容易。
int index index = -1;
int maxLength = -1;
for (i = 1; i <= numberOfStrsInArray; i++) {
if (null != strstr(string, array)) {
if ((strlen(array) > maxLength) {
index = i;
maxLength = strlen(array);
}
}
正如@Jongware所提到的,如果数组不包含以空值终止的stings - 它将导致崩溃,因为数组将超出范围。如果你绝对必须使用非null-teminated字符串,你应该考虑使用类似这样的东西
int size = sizeof array / sizeof array[0];
char * strA = new char[ size + 1);
strncpy (strA, string, size);
strA[size] = 0;
答案 1 :(得分:0)
在您的代码中,
for (i = 1; i <= numberOfStrsInArray; i++)
1)此处
i
应从0
开始。如您所知,数组索引始终从0
开始。所以第一个字符串将是0
索引。2)另一点是循环应该运行到
numberOfStrsInArray-1
。
因此,循环应该变为
for (i = 0; i < numberOfStrsInArray; i++)
<强>被修改强>
根据OP的评论,上述第2点仅与代码相关..