小编sud*_*03r的帖子

如何在Perl中创建唯一标识符?

我正在创建一个面向文件的数据库,其中包含各种用户执行的一些测试结果.为此,我需要为数据库中的每个条目生成唯一的id.ID必须满足以下要求:

  • Ids应该相当小(最多6个字符)
  • 对于每个测试用例和用户组合,每次应生成相同的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)

这有时会导致各种组合的相同结果,即未观察到唯一性.他们是否有其他方法可以实现这一目标?改变种子价值有助于实现独特性.

perl uniqueidentifier

2
推荐指数
1
解决办法
1665
查看次数

逐字节打印4字节整数时出现意外行为

我有这个示例代码,用于将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_ntopinet_pton.
我期待的答案不仅仅是建议那些答案.

c scanf ip-address endianness

1
推荐指数
2
解决办法
4812
查看次数

在C中将静态分配的2D数组作为函数参数传递

考虑以下代码:


#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,的阵列的大小intmatrix(即点N)在编译时是必需的.因此,当大小不同时,我的功能在其他情况下不起作用.

那么,我该如何处理呢?
动态数组是一个解决方案,但我想知道是否可以使用静态数组.

c multidimensional-array

1
推荐指数
1
解决办法
5187
查看次数

执行时间差异,有没有?

考虑一下这段代码:


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++ class-design

1
推荐指数
1
解决办法
71
查看次数

访问C++程序的代码部分

根据我的理解,C/C++程序在内存中看起来像这样:

C程序的内存布局. 来源:互联网

我想知道以下内容:

  1. 我可以访问正在运行的程序的"文本部分"吗?通过访问我的意思是打印开始和结束地址并检查内容.
  2. 我可以在运行时将"文本部分"重定位到内存中的其他地址吗?

谢谢,

c c++ linux memory-management elf

1
推荐指数
1
解决办法
759
查看次数

在实现文件中包含注释类声明

每个人都知道更易读的代码的优点.因此,为了使我的代码更具可读性,我通常在该类的实现文件中包含注释类声明.
这样我就不必浏览各种include目录来定义.
那么,这是一个很好的做法还是只是过度记录?
如果有一些标准技术,请告诉我.
编辑:
有没有办法从Vim中的实现迁移到类声明?
除了在新缓冲区中打开它.

谢谢

c++ documentation comments code-readability

0
推荐指数
1
解决办法
269
查看次数

计算文件中的单词?

我有一个用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);
  }
}

c file

0
推荐指数
1
解决办法
2633
查看次数

对象构造[c ++]

我有这门课:

class A {
    B b;
    // snip.
}
Run Code Online (Sandbox Code Playgroud)

只要B有一个不带参数的构造函数或默认构造函数,这就可以正常工作.

但是,如果B需要构造为B(x),那么应该如何修改代码.一个显而易见的方法是使用new/delete和B*但我很好奇是否可以不使用动态内存?

c++ constructor

0
推荐指数
1
解决办法
128
查看次数