仍然是C ++的新手。
不得不在类中编写一个函数来计算多维数组中每个数字的数量。
现在我没想到你可以从一个被调用的函数中返回多个int
值,然后在基于文本的答案中使用所有这些返回值,所以我尝试return
取决于一个不同的值请求的值作为每个数字的参数。
以下代码不必要地长,我仍然收到以下错误。
main-1-3.cpp: In function 'int main()':
main-1-3.cpp:12:21: error: too few arguments to function 'int
count_numbers(int(*)[4], int)'
count_numbers(array);
^
main-1-3.cpp:7:12: note: declared here
extern int count_numbers(int array[4][4], int);
通过一些调试我可能会修复这些编译错误,但我觉得我的方法非常复杂,并且想知道是否可以将函数调用为:
count_number(array[4][4])
(不需要Q参数),然后让count_numbers
返回所有十个数字值,然后将它们输出为<< ",3:" << three <<
而不是<< ",8:" << count_numbers(array, 8) <<
无论如何,function.cpp和main.cpp如下所示。 如果有人能指出我正确的方向,那将非常感激。只需要知道正确的方法,这样我就可以压缩这段代码。
function.cpp
#include <iomanip>
#include <locale>
#include <sstream>
#include <string>
#include <iostream>
int count_numbers(int array[4][4], int Q)
{
int X=0;
int Y=0;
int zero=0;
int one=0;
int two=0;
int three=0;
int four=0;
int five=0;
int six=0;
int seven=0;
int eight=0;
int nine=0;
while(X<4)
{
if(array[X][Y]==0)
{
zero=zero+1;
}
if(array[X][Y]==1)
{
one=one+1;
}
if(array[X][Y]==2)
{
two=two+1;
}
if(array[X][Y]==3)
{
three=three+1;
}
if(array[X][Y]==4)
{
four=four+1;
}
if(array[X][Y]==5)
{
five=five+1;
}
if(array[X][Y]==6)
{
six=six+1;
}
if(array[X][Y]==7)
{
seven=seven+1;
}
if(array[X][Y]==8)
{
eight=eight+1;
}
if(array[X][Y]==9)
{
nine=nine+1;
}
Y++;
if(Y==4)
{
Y=0;
X++;
}
}
if(Q==0)
{
return zero;
}
if(Q==1)
{
return one;
}
if(Q==2)
{
return two;
}
if(Q==3)
{
return three;
}
if(Q==4)
{
return four;
}
if(Q==5)
{
return five;
}
if(Q==6)
{
return six;
}
if(Q==7)
{
return seven;
}
if(Q==8)
{
return eight;
}
if(Q==9)
{
return nine;
}
}
的main.cpp
#include <iomanip>
#include <locale>
#include <sstream>
#include <string>
#include <iostream>
extern int count_numbers(int array[4][4], int);
int array[4][4] = { {1,2,3,4} , {1,2,3,4} , {1,2,3,4} , {1,2,3,4}};
int main()
{
count_numbers(array);
std::cout << ",0:" << count_numbers(array, 0) << ",1:" << count_numbers(array, 1) << ",2:" << count_numbers(array, 2) << ",3:" << count_numbers(array, 3) << ",4:" << count_numbers(array, 4) << ",5:" << count_numbers(array, 5) << ",6:" << count_numbers(array, 6) <<",7:" << count_numbers(array, 7) << ",8:" << count_numbers(array, 8) << ",9:" << count_numbers(array, 9) << std::endl;
}
PS。忽略不正确的缩进,只是粘贴到此站点
PPS。感谢您的帮助。
的 修改 的
谢谢你&#34;弗拉德来自莫斯科&#34;寻求帮助。
如果我只是从count_number(array);
main.cpp
来电,那么我的初始(可怕)代码就会有效
然而,Vlad提出的for循环系统允许我将代码缩小80%。它现在看起来像这样:
int count_numbers(int array[4][4], int Q)
{
int ans=0;
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
ans += array[i][j] ==Q;
}
}
return ans;
}
感谢您提供的帮助非常棒,我开始编写Python代码,因此我对C ++中的循环缺乏了解,这是真正的问题。 无论如何,问题解决了..
答案 0 :(得分:3)
此次电话
count_numbers(array);
没有意义,而且无效,因为该函数需要两个参数而不是一个。
函数本身可以按以下方式编写
const size_t N = 4;
size_t count_number( const int ( &a )[N][N], int value )
{
size_t n = 0;
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
n += a[i][j] == value;
}
}
return n;
}
并调用
std::cout << "0: " << count_number( array, 0 )
<< ", 1: " << count_number( array, 1 )
<< ", 2: " << count_number( array, 2 )
<< ", 3: " << count_number( array, 3 )
<< ", 4: " << count_number( array, 4 )
<< ", 5: " << count_number( array, 5 )
<< ", 6: " << count_number( array, 6 )
<< ", 7: " << count_number( array, 7 )
<< ", 8: " << count_number( array, 8 )
<< ", 9: " << count_number( array, 9 )
<< std::endl;
这是一个示范程序
#include <iostream>
const size_t N = 4;
size_t count_number( const int ( &a )[N][N], int value )
{
size_t n = 0;
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
n += a[i][j] == value;
}
}
return n;
}
int main()
{
int array[N][N] =
{
{ 1, 2, 3, 4 } ,
{ 1, 2, 3, 4 } ,
{ 1, 2, 3, 4 } ,
{ 1, 2, 3, 4 }
};
bool first = true;
for ( int value = 0; value < 10; ++value )
{
size_t n = count_number( array, value );
if ( n )
{
std::cout << ( first ? first = false, "" : ", " )
<< value << ": " << n;
}
}
std::cout << std::endl;
}
它的输出是
1: 4, 2: 4, 3: 4, 4: 4
更通用的方法可以采用以下方式
#include <iostream>
#include <iterator>
#include <algorithm>
template <typename InputIterator, typename T>
size_t count_number( InputIterator first,
InputIterator last,
const T &value )
{
size_t n = 0;
for ( ; first != last; ++first )
{
n += std::count( std::begin( *first ), std::end( *first ), value );
}
return n;
}
int main()
{
const size_t N = 4;
int array[N][N] =
{
{ 1, 2, 3, 4 } ,
{ 1, 2, 3, 4 } ,
{ 1, 2, 3, 4 } ,
{ 1, 2, 3, 4 }
};
bool first = true;
for ( int value = 0; value < 10; ++value )
{
size_t n = count_number( std::begin( array ), std::end( array ), value );
if ( n )
{
std::cout << ( first ? first = false, "" : ", " )
<< value << ": " << n;
}
}
std::cout << std::endl;
}
程序输出与上面显示的相同。
如果数组只包含您需要计数的数字,那么该函数可能看起来像
const size_t N = 4;
void count_digits( const int ( &a )[N][N], size_t ( &digits)[10] )
{
for ( size_t &x : digits ) x = 0;
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
++digits[a[i][j]];
}
}
}
要调用该函数,您需要在main中声明一个数组,例如
size_t digits[10];
答案 1 :(得分:1)
您可以使用c ++ return int[]
更好地返回vector<int>
或事件。
在你的功能中你可以用
之类的东西替换一,二......vector<int> result(10);
这将创建一个包含10个条目的向量,所有条目都为0。
然后将three = three + 1
之类的内容替换为result[3] = result[3] + 1
或更加精简result[3]++
然后在结束时你可以写... << ",0:" << result[0] << ...
或甚至做一个for循环,如:
for (int i = 0; i < 10; ++i) count << "," << i << ":" << result[i];
如果需要,您可以使用int[]
完成所有这些操作,但是您需要注意分配和释放内存。 vector
会简化您的代码。