我正在创建一个面向文件的数据库,其中包含各种用户执行的一些测试结果.为此,我需要为数据库中的每个条目生成唯一的id.ID必须满足以下要求:
我尝试的是一个简单的BKDR哈希函数,其种子值为31,并使用了ord()函数,如下所示:
@chars = split(//,$hash_var);
$hash = 0;
$seed = 31;
foreach $char ( @chars ) {
if( $char !~ m/\d/ ) {
$hash = ( $seed * $hash ) + ord( $char );
}
else {
$hash = ( $seed * $hash ) + $char ;
}
}
$hash = ( $hash & 0x7FFFFFFF ) % 1000;
$hash = "$chars[0]$chars[$#chars]$hash" ;
Run Code Online (Sandbox Code Playgroud)
这有时会导致各种组合的相同结果,即未观察到唯一性.他们是否有其他方法可以实现这一目标?改变种子价值有助于实现独特性.
我有这个示例代码,用于将32位整数转换为ip地址.
#include <stdio.h>
int main()
{
unsigned int c ;
unsigned char* cptr = (unsigned char*)&c ;
while(1)
{
scanf("%d",&c) ;
printf("Integer value: %u\n",c);
printf("%u.%u.%u.%u \n",*cptr, *(cptr+1), *(cptr+2), *(cptr+3) );
}
}
Run Code Online (Sandbox Code Playgroud)
此代码为输入提供了错误的输出2249459722.但当我更换
scanf("%d",&c) ;Run Code Online (Sandbox Code Playgroud) 通过 scanf("%u",&c) ;Run Code Online (Sandbox Code Playgroud)
输出结果是正确的.
PS:我知道inet_ntop和inet_pton.
我期待的答案不仅仅是建议那些答案.
考虑以下代码:
#include <stdio.h>
#define N 5
void printMatrix(int (*matrix)[N],int n)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d",matrix[i][j]);
printf("\n");
}
}
int main()
{
int R[N][N]={{1,2,3},{4,5,6},{7,8,9}};
printMatrix(R,3);
}
Run Code Online (Sandbox Code Playgroud)
这可以正常工作.
现在,我想在单独的源文件中编写处理2D矩阵的函数,并在需要的地方链接它们.
但是,我遇到了一个问题,因为在函数printMatrix,的阵列的大小int要matrix(即点N)在编译时是必需的.因此,当大小不同时,我的功能在其他情况下不起作用.
那么,我该如何处理呢?
动态数组是一个解决方案,但我想知道是否可以使用静态数组.
考虑一下这段代码:
class A {
void methodX() {
// snip (1 liner function)
}
}
class B {
void methodX() {
// same -code
}
}
现在我可以去的其他方式是,我有一个类(AppManager),其大多数成员是静态的(从遗留代码,不建议我单身;))
class AppManager {
public:
static void methodX(){
// same-code
}
}Run Code Online (Sandbox Code Playgroud)
应该首选哪一个?由于两者都是内联的,因此不应存在运行时差异,对吧?
哪种形式更清洁?
根据我的理解,C/C++程序在内存中看起来像这样:

我想知道以下内容:
谢谢,
每个人都知道更易读的代码的优点.因此,为了使我的代码更具可读性,我通常在该类的实现文件中包含注释类声明.
这样我就不必浏览各种include目录来定义.
那么,这是一个很好的做法还是只是过度记录?
如果有一些标准技术,请告诉我.
编辑:
有没有办法从Vim中的实现迁移到类声明?
除了在新缓冲区中打开它.
谢谢
我有一个用C编写的程序,它应该计算单词"the"出现在作为参数给出的文本文件中的次数.但程序不断给出分段错误错误,我对如何解决这个问题没有更多的想法.任何帮助将不胜感激.谢谢!
这是代码:
#include <stdio.h>
#include <string.h>
void main(int argc, char *argv[])
{
int h,i;
FILE *fp;
char* mess;
for(i=1; i < argc; i++)
{
h=0;
fp=fopen(argv[i],"r");
while (!feof(fp))
{
fscanf(fp,"%s",mess);
if (strcmp(mess,"the")==0)
h++;
}
printf("The file %s contains the word \"the\" %d times.",argv[i],h);
h=0;
fclose(fp);
}
}
我有这门课:
class A {
B b;
// snip.
}
Run Code Online (Sandbox Code Playgroud)
只要B有一个不带参数的构造函数或默认构造函数,这就可以正常工作.
但是,如果B需要构造为B(x),那么应该如何修改代码.一个显而易见的方法是使用new/delete和B*但我很好奇是否可以不使用动态内存?
c ×4
c++ ×4
class-design ×1
comments ×1
constructor ×1
elf ×1
endianness ×1
file ×1
ip-address ×1
linux ×1
perl ×1
scanf ×1