相关疑难解决方法(0)

如果在循环条件下使用,是否会多次计算strlen?

我不确定以下代码是否会导致冗余计算,还是特定于编译器?

for (int i = 0; i < strlen(ss); ++i)
{
    // blabla
}
Run Code Online (Sandbox Code Playgroud)

strlen()每次i增加时会计算出来吗?

c c++ optimization gcc strlen

108
推荐指数
3
解决办法
6425
查看次数

小字符串的快速开源校验和

对于小字符串(20-500个字符),我需要快速校验和(尽可能快).

我需要源代码,而且必须很小!(最多约100 LOC)

如果它可以在Base32/64中生成字符串.(或类似的东西)它会是完美的.基本上校验和不能使用任何"坏"字符..你知道..通常(){} [].,;:/ + - \| 等等

澄清

它可能是强弱的,这无关紧要,因为它仅用于幕后目的.

它不需要包含原始字符串的所有数据,因为我只会与生成的校验和进行比较,我不期望任何类型的"解密".

javascript string base64 checksum base32

21
推荐指数
3
解决办法
2万
查看次数

时间复杂度有何不同?

如果首先存储值然后使用它,是否可以节省时间?
例如;

while(i<strlen(s))
 //code
Run Code Online (Sandbox Code Playgroud)

int n = strlen(s);
while(i<n)
 //code
Run Code Online (Sandbox Code Playgroud)

第二种方法的时间复杂度是否较低,因为首先存储然后使用函数的返回值,从而避免每次进入循环时调用函数?

c performance time function

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

打印字符串,结尾无填充0

我正在尝试以"Hello"二进制形式打印字符串。

我可以使用它,但是,我希望它打印时不带填充垫

所以

  01001000 01100101 01101100 01101100 01101111
Run Code Online (Sandbox Code Playgroud)

代替

  01001000 01100101 01101100 01101100 01101111 00000000
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

char t[] = "Hello";

for (int j = 0; j < sizeof(t); j++)
{
    unsigned char c = t[j];

    for (int i = 7; i >= 0; i--) {
        printf("%d", (c >> i) & 1 ? 1 : 0);
    }

    printf(" ");

}
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation c-strings

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