C++ C++;,比较两个字符';s
我有这个:C++ C++;,比较两个字符';s,c++,loops,c++11,while-loop,char,C++,Loops,C++11,While Loop,Char,我有这个: #include <iostream> #include <conio.h> int main () { char str1[] = "abc123"; char str2[] = "abc123"; do { std::cout << "String: "; std::cin >> str2; } while (str1 != str2);
#include <iostream>
#include <conio.h>
int main ()
{
char str1[] = "abc123";
char str2[] = "abc123";
do
{
std::cout << "String: ";
std::cin >> str2;
} while (str1 != str2);
std::cout << "str1 is equal to str2, press any key to quit.\n";
_getch();
return 0;
}
#包括
#包括
int main()
{
字符str1[]=“abc123”;
字符str2[]=“abc123”;
做
{
std::cout>str2;
}而(str1!=str2);
std::cout您正在比较指针
使用strcmp
此外,使用cin
是不安全的,因为左侧可能太小
修改为
} while(strcmp(str1, str2))
您正在比较指针
使用strcmp
此外,使用cin
是不安全的,因为左侧可能太小
修改为
} while(strcmp(str1, str2))
使用std::string
而不是原始数组和指针,以避免诸如打开缓冲区溢出、比较指针而不是字符串等愚蠢的错误
#包括
#包括
int main()
{
std::string str1=“abc123”;
std::string str2=“abc123”;
做
{
std::cout>str2;
}而(str1!=str2);
std::cout使用std::string
而不是原始数组和指针,以避免诸如打开缓冲区溢出、比较指针而不是字符串等愚蠢的错误
#包括
#包括
int main()
{
std::string str1=“abc123”;
std::string str2=“abc123”;
做
{
std::cout>str2;
}而(str1!=str2);
std::cout您没有正确地比较两个字符串,而是比较了两个字符数组的地址
您必须使用strcmp功能
while(strcmp(str1,str2)!=0)
或者使用std::string类,该类允许您使用重载运算符==来比较字符串。如果没有正确比较两个字符串,则是比较两个字符数组的地址
您必须使用strcmp功能
while(strcmp(str1,str2)!=0)
或者使用std::string类,它允许您使用重载运算符==来比较字符串。str1和str2是字符数组,这实际上意味着它们是指向字符数组的指针。它们的值是常量,并且永远不会相等。将声明替换为:
string str1 = "abc123";
string str2 = "abc123";
您将获得更好的结果。(但需要标题)str1和str2是字符数组,这实际上意味着它们是指向字符数组的指针。它们的值是常量,永远不会相等。请将声明替换为:
string str1 = "abc123";
string str2 = "abc123";
分配两个数组时,将在主函数堆栈帧中获得更好的结果。(但需要标题):
这两个阵列得到两个不同的固定地址,永远不会改变
即使数组的内容每次都更改
char str1[] = "abc123"; // str1 gets an unique fixed address say 1000
char str2[] = "abc123"; // str2 gets an unique fixed address say 1007
因此语句while(str1!=str2);
继续比较地址1000和1007以及
因此,循环条件始终为真。在分配两个数组时,在主函数堆栈帧中:
这两个阵列得到两个不同的固定地址,永远不会改变
即使数组的内容每次都更改
char str1[] = "abc123"; // str1 gets an unique fixed address say 1000
char str2[] = "abc123"; // str2 gets an unique fixed address say 1007
因此语句while(str1!=str2);
继续比较地址1000和1007以及
因此,循环条件始终为真。因为您正在比较地址。请尝试显示str1
和str2
是什么。+1以对抗无法解释的否决票(也因为我认为绝对没有理由否决此问题)。我也不知道。如果你已经知道答案,大多数问题都会无缘无故地收到否决票,但这并不意味着其他人也应该收到否决票。lol标记为C++11:)的问题中的字符数组会导致你在比较地址。请尝试显示str1
和str2
是什么。+1可抵消无法解释的否决票(也是因为我完全没有理由对这个问题投反对票。)我也没有。如果你已经知道答案并不意味着其他人也应该知道,那么大多数问题都会无缘无故地收到反对票。lol标记为C++11的问题中的字符数组:)当然,由于这个代码看起来更像C,而不是C++,也许其中一个STRCMP答案更适合使用<代码> CIN < /C>和 CUT C++的Simule:当然,因为这个代码看起来更像C而不是C++,也许其中一个STRCMP答案更适合使用< <代码> CIN < /C>和<代码> CUT/<代码> C++的Simple。几乎感觉到C++应该禁止使用字符[]或者char*代表string,使用std::string。你认为Alf先生怎么样?嗯,使用char*会给他一个常量警告。我通常这样做,我现在使用chars还有另一个原因,通常我不会。你忘了在主函数上返回值btw@Koushik:IMHO在C++11中没有真正好的字符串类。不仅仅是接口这很难理解,但无论是std::string
还是std::wstring
都不能以可移植的方式很好地用于国际文本。一种解决方案是一种新的基本字符编码类型,它取决于系统以及相应的字符串类。我在Agusut 2013年发行的ACCU Overload J中的一篇文章中概述了必要的类型我还没有完成关于String类……的文章——-):YOP:不,它是由C++标准(从C++ 98和on)保证的。它几乎感觉到C++应该禁止使用char []。或者char*代表string,使用std::string。你认为Alf先生怎么样?嗯,使用char*会给他一个常量警告。我通常这样做,我现在使用chars还有另一个原因,通常我不会。你忘了在主函数上返回值btw@Koushik:IMHO在C++11中没有真正好的字符串类。不仅仅是接口这很难理解,但无论是std::string
还是std::wstring
都不能以可移植的方式很好地用于国际文本。一种解决方案是一种新的基本字符编码类型,它取决于系统以及相应的字符串类。我在Agusut 2013年发行的ACCU Overload J中的一篇文章中概述了必要的类型我们的。我还没有完成关于字符串类的文章…;-)@y