- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这道题首先要写两个函数:
new_array (char** a, int n, int m): create a two-dimension matrix of characters whose size is m*n.
del_array (char** a, int n, int m): delete a two-dimension matrix of characters whose size is m*n.
之后,您使用上述两个函数来执行以下任务:给你一张大小为 M*N
的大图像和一些大小为 m*n
的小图像。每个图像都由一个字符矩阵及其大小表示。您的任务是找出每个小图像在该大图像中出现的位置数。
输入文件:image.inp
。
输入文件的第一行包含两个正整数M和N,分别是大图的高和宽。每行 2
...M+1
由 N
个字符组成(a
...z
, A
...Z
) 描述了大图的一行。
随后,有一些小图像,您必须找到大图像。每个小图像都写在大图像的形成中。特别地,有一行 m
= 0 和 n
= 0,你必须结束你的查找过程。
输出文件:image.out
。
对于输入文件中的每个小图像,您必须写一个数字,表示该小图像在大图像中出现的位置数。
image.inp image.out
4 4 3
Aaaa 1
Aaaa
Aaab
Aaaa
2 2
Aa
Aa
2 2
aa
ab
0 0
我这样做了:
文件头:image.h
:
#ifndef _IMAGE_H_
#define _IMAGE_H_
using namespace std;
void new_array (char** , int , int );
void del_array (char** , int , );
bool small_image(char**,char**,int,int,int,int)
int count_small_image(char** , char** , int ,int ,int ,int );
#endif
文件image.cpp
:
#include<iostream>
#include "image.h"
#include <fstream>
using namespace std;
void new_array(char** a, int n,int m)
{ ifstream inStream; inStream.open("image.inp");
a=new char* [m] ;
for(int i=0; i<m; i++)
{
a[i]=new char[n];
for(int j=0;j<n; j++)
inStream>>a[i][j];
}
}
void del_array(char** a,int m)
{
for(int i=0;i<m ;i++)
{
delete [] a[i];
}
delete [] a;
}
bool small_image(char** a,char** b, int i,int j,int p,int q)
{
for(int u=i;u<i+p;u++ )
{
for(int v=j;v<j+q;v++ )
{
if(a[u][v]!=b[u-i][v-j]) return false;
}
}
return true;
}
int count_small_image(char** a,char** b,int m,int n,int p, int q)
{
int COUNT=0;
for(int i=0;i<m;i++ )
for(int j=0;j<n;j++ )
{
if(a[i][j]==b[0][0])
{
if((m-i+1)>=p && (n-j+1)>=q)
{
if(small_image(a,b,i,j,p,q)==false) break;
else COUNT++;
}
}
}
return COUNT;
}
文件main_count_small_image.cpp
:
#include <iostream>
#include "image.h"
#include <fstream>
using namespace std;
int main()
{
ifstream inStream;
inStream.open("image.inp");
ofstream outStream;
outStream.open("image.out");
int m,n,p,q;
char** a;
char** b;
inStream>>n>>m;
new_array(a,n,m);
inStream>>q>>p;
new_array(b,q,p);
int c;
c=count_small_image(a,b,m,n,p,q);
outStream<<c;
del_array(a,m);
del_array(b,p);
return 0;
getchar();
}
但是,我得到:
[error]: has stopped working ...
最佳答案
这是一段简单的代码,最好通过调试器逐步完成。 OP 将学到比他们从预先设定的答案中学到的更多的跟踪执行低的知识。
蛮力有效,但之前的问题有一个建议更好方法的答案。参见 How to detect occurrencies of a small image in a larger image? .
新的数组方法实现不正确。它无法返回构建的数组已经涵盖了,所以我跳过它。规范中没有任何地方说 new_array 应该从文件中读取数据。此外,重新打开文件将需要新流从头开始并在获取图像数据之前重新读取 m 和 n。这没有被考虑在内。
缺少描述性变量名称使该程序难以阅读,并且不利于协助 OP。同样缺乏合理的缩进和大括号的使用。该程序的外观似乎要求读者不要提供帮助。
在 count_small_image 中给出调用
count_small_image(a,b,m,n,p,q);
两个 for 循环为超出范围的数组访问设置了 small_image。我相信这是在试图阻止。
if((m-i+1)>=p && (n-j+1)>=q)
也许是这样,但这是一种复杂而笨拙的方法。请记住:未编写的代码没有错误。相反,尝试一些类似的东西
for(int m = 0; m < largeMaxM - smallMaxM; m++)
{
for(int n = 0; n < largeMaxM - smallMaxN; n++)
其中 smallMaxM 和 smallMaxN 是小图像的 m 和 n 边界,largeMaxM 和 largeMaxN 是大图像的 m 和 n 边界。
小计数也过于复杂。对它进行排序,使其基于对小图像的迭代,从而消除了麻烦。描述性变量名称也使函数更具可读性。
bool small_image(char** a,char** b, int offsetM,int offsetN,int maxM,int maxN)
{
for(int m = 0; m < maxM; m++)
{
for(int n = 0; n < maxN; n++)
{
if(a[m+offsetM][n+offsetN]!=b[m][n]) return false;
}
}
return true;
}
我在没有编译器的情况下在平板电脑上运行,所以请原谅我。
关于c++ - c++的数组和指针作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033060/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!