标签: strcmp

如何正确比较字符串?

我试图让一个程序让用户输入一个单词或字符,存储它,然后打印它,直到用户再次键入它,退出程序.我的代码看起来像这样:

#include <stdio.h>

int main()
{
    char input[40];
    char check[40];
    int i=0;
    printf("Hello!\nPlease enter a word or character:\n");
    gets(input);
    printf("I will now repeat this until you type it back to me.\n");

    while (check != input)
    {
        printf("%s\n", input);
        gets(check); 
    }

    printf("Good bye!");


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是我不断打印输入字符串,即使用户输入(检查)与原始(输入)匹配.我比较错误吗?

c string strcmp

168
推荐指数
6
解决办法
41万
查看次数

有没有JavaScript strcmp()?

任何人都可以为我验证这个吗?JavaScript没有strcmp()的版本,所以你必须写出类似的东西:

 ( str1 < str2 ) ? 
            -1 : 
             ( str1 > str2 ? 1 : 0 );
Run Code Online (Sandbox Code Playgroud)

javascript string strcmp

123
推荐指数
4
解决办法
11万
查看次数

为什么strcmp没有SIMD优化?

我试图在x64计算机上编译这个程序:

#include <cstring>

int main(int argc, char* argv[])
{
  return ::std::strcmp(argv[0],
    "really really really really really really really really really"
    "really really really really really really really really really"
    "really really really really really really really really really"
    "really really really really really really really really really"
    "really really really really really really really really really"
    "really really really really really really really really really"
    "really really really really really really really really really"
    "really really really really really really …
Run Code Online (Sandbox Code Playgroud)

c++ sse simd strcmp sse2

36
推荐指数
3
解决办法
7563
查看次数

strcasecmp 算法有缺陷吗?

我正在尝试strcasecmp用 C重新实现该函数,但我注意到比较过程中似乎存在不一致之处。

man strcmp

strcmp() 函数比较两个字符串 s1 和 s2。不考虑区域设置(有关区域设置的比较,请参阅 strcoll(3))。如果发现 s1 分别小于、匹配或大于 s2,则它返回一个小于、等于或大于零的整数。

man strcasecmp

strcasecmp() 函数对字符串 s1 和 s2 执行逐字节比较,忽略字符的大小写。如果发现 s1 分别小于、匹配或大于 s2,则它返回一个小于、等于或大于零的整数。

int strcmp(const char *s1, const char *s2);
int strcasecmp(const char *s1, const char *s2);

鉴于此信息,我不明白以下代码的结果:

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

int main()
{
    // ASCII values
    // 'A' = 65
    // '_' = 95
    // 'a' = 97

    printf("%i\n", strcmp("A", "_"));
    printf("%i\n", strcmp("a", "_"));
    printf("%i\n", strcasecmp("A", "_"));
    printf("%i\n", strcasecmp("a", "_"));
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c strcmp

34
推荐指数
3
解决办法
2047
查看次数

将字符串作为指针或文字传递时,strcmp()返回值不一致

strcmp当我注意到这一点时,我正在玩,这里是代码:

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

int main(){

    //passing strings directly
    printf("%d\n", strcmp("ahmad", "fatema"));

    //passing strings as pointers 
    char *a= "ahmad";
    char *b= "fatema";
    printf("%d\n",strcmp(a,b));

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

输出是:

-1
-5
Run Code Online (Sandbox Code Playgroud)

不应该strcmp一样吗?为什么,我给我传递一个字符串作为不同的值"ahmad"或作为char* a = "ahmad".将值传递给函数时,它们是否在其堆栈中分配?

c c++ linux strcmp

32
推荐指数
2
解决办法
1852
查看次数

strcmp为空字符串

我正在审查一些代码,我看到有人做了

if (0 == strcmp(foo,""))
Run Code Online (Sandbox Code Playgroud)

我很好奇,因为我认为这样做会更快

if (foo[0] == '\0')
Run Code Online (Sandbox Code Playgroud)

这是正确的还是strcmp足够优化,使它们相同.

(我意识到,即使存在一些差异,它也会很小,但我想通过使用我的方法保存至少一些指令.)

c strcmp

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

左值作为赋值的左操作数

我为什么要来

lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

用单个字符串比较?我该如何解决这个问题C

if (strcmp("hello", "hello") = 0)
Run Code Online (Sandbox Code Playgroud)

谢谢!

c strcmp lvalue

23
推荐指数
2
解决办法
33万
查看次数

为什么标准字符串函数比我的自定义字符串函数更快?

我决定找到2个功能的速度:

  • strcmp - string.h中定义的标准比较函数
  • xstrcmp-一个具有相同参数并且相同的函数,就像我创建它一样.

这是我的xstrcmp函数:

int xstrlen(char *str)
{
    int i;
    for(i=0;;i++)
    {
        if(str[i]=='\0')
            break;
    }
    return i;
}

int xstrcmp(char *str1, char *str2)
{
    int i, k;
    if(xstrlen(str1)!=xstrlen(str2))
        return -1;
    k=xstrlen(str1)-1;
    for(i=0;i<=k;i++)
    {
        if(str1[i]!=str2[i])
            return -1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不想依赖strlen,因为我想要用户定义的所有内容.

所以,我找到了结果.strcmp每毫秒进行364次比较,而我的xstrcmp每毫秒只做20次比较(至少在我的电脑上!)

任何人都可以告诉为什么会这样吗?xstrcmp函数如何使自己如此之快?

c c++ performance compare strcmp

22
推荐指数
3
解决办法
3341
查看次数

strcmp()返回C中的值

我正在学习strcmp()C.我明白当两个字符串相等时,strcmp返回0.

但是,当strcmp第一个字符串小于第二个字符串时,手册页状态返回小于0时,它是指长度,ASCII值还是其他什么?

c strcmp

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

为什么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 ×10

c ×7

c++ ×4

performance ×2

string ×2

compare ×1

javascript ×1

linux ×1

lvalue ×1

simd ×1

sse ×1

sse2 ×1

time ×1