在c ++问题中比较两个字符串。

时间:2015-03-05 10:55:50

标签: c++ string

拥有此代码:

char a[20]="wasd", b[20]="asd";
if((a+1)==b)
    printf("yes");

即使“a + 1”为“asd”,也不会返回“yes”。我想知道我做错了什么?

5 个答案:

答案 0 :(得分:3)

您需要使用strcmp来比较C字符串。 ==只会比较指针。

例如:

#include <string.h> // or <cstring> if you're writing C++
...
char a[20]="wasd", b[20]="asd";
if(strcmp(a+1, b)==0)
    printf("yes");

顺便说一句,如果您正在编写C ++,那么最好不要使用std::string。然后你可以简单地使用==来比较它们。

答案 1 :(得分:2)

如果它不是学生作业并且您真正使用C ++(正如您的标记所示),则应使用字符串。现在你正在使用数组并比较数组地址而不是真正的字符串。以C ++方式,您的代码可能如下所示:

#include <iostream>
#include <string>

int main()
{
    std::string a ="wasd";
    std::string b ="asd";
    if(a.substr(1) == b)
        std::cout << "Yes!\n";
}

好吧,有一种更好的方法可以找到一个字符串是否包含另一个字符串,但代码是C代码到C ++的直接映射 - 是的。

答案 2 :(得分:1)

您实际上是在比较指针地址,而不是实际的字符串内容。

您的代码应使用strcmp

char a[20]="wasd", b[20]="asd";
if(strcmp(a+1, b) == 0)
    printf("yes");

如果字符串相同,请注意strcmp返回0。

更好,更惯用的选择是使用std::string

std::string a = "wasd", b = "asd";
if(a.substr(1) == b)
    std::cout << "yes";

substr会复制字符串,因此效率略低于上一种方法。

答案 3 :(得分:0)

您必须使用string.h中的strcmp来比较字符串。    if(strcmp(a+1,b)==0) 在你的情况下。

答案 4 :(得分:0)

根据你的代码,当使用(a + 1)== b时,你正在比较分别指向字符串&#39; a&#39;的第二个字符的指针的地址。和字符串的第一个字符&#39; b&#39;。

如果您将代码修改为:

,它可以工作
@Echo Off
Set "PSS="
For /F "Tokens=1,3" %%A In (
    'Reg Query "HKCU\Control Panel\Desktop\WindowMetrics" /v AppliedDPI'
) Do If /I "%%A"=="AppliedDPI" (If %%B Equ 96 Set PSS=somescript1.ps1
    If %%B Equ 192 Set PSS=somescript2.ps1)
If defined PSS powershell -ExecutionPolicy Unrestricted -File "%PSS%"

您还可以使用compare()来比较。

中包含的字符串