拥有此代码:
char a[20]="wasd", b[20]="asd";
if((a+1)==b)
printf("yes");
即使“a + 1”为“asd”,也不会返回“yes”。我想知道我做错了什么?
答案 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()来比较。
中包含的字符串