相关疑难解决方法(0)

为什么strcmp比我的功能快得多?

我写了一个函数,Str::Compare基本上是strcmp用另一种方式重写的.在比较这两个函数时,在循环中重复500'000'000次,strcmp执行速度太快,大约快x750倍.

此代码在C库中编译,-Os参数为active:

int Str::Compare(char* String_1, char* String_2)
{
    char TempChar_1, TempChar_2;

   do
   {
        TempChar_1 = *String_1++;
        TempChar_2 = *String_2++;
   } while(TempChar_1 && TempChar_1 == TempChar_2);

   return TempChar_1 - TempChar_2;
}
Run Code Online (Sandbox Code Playgroud)

该函数的执行时间3.058s,而strcmp0.004s.

为什么会这样?

这也是我实现基准测试循环的方式:

int main()
{
     char Xx[] = {"huehuehuehuehuehuehuehuehuehuehuehuehuehue"},
          Yy[] = {"huehuehuehuehuehuehuehuehuehuehuehuehuehue"};
     for(int i = 0; i < 500000000; ++i)
         Str::Compare(Xx, Yy);
}
Run Code Online (Sandbox Code Playgroud)

编辑:测试我编写的一些代码和优化,提高了Str::Compare速度.如果之前strcmpx750倍,现在只有x250.这是新代码: …

c++ performance time strcmp

20
推荐指数
2
解决办法
5249
查看次数

strcmp()在C中完全返回什么?

我用C编写了这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main()
{
    char string1[20];
    char string2[20];
    strcpy(string1, "Heloooo");
    strcpy(string2, "Helloo");
    printf("%d", strcmp(string1, string2));
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

控制台打印值是1还是字符和字符ASCII值之间的差值,即111?在这个网站上写道,这应该给出111,但当我在我的笔记本电脑上运行时,它显示1.为什么?o\0

c string strcmp

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

标签 统计

strcmp ×2

c ×1

c++ ×1

performance ×1

string ×1

time ×1