Мне нужна помощь... Как получить эту программу для чтения того, что тип человека является строкой, и посмотреть, равны ли строки?
#include <iostream>
using namespace std;
int main()
{
char name;
cout << "Type my name is:";
cin >> name;
if
name ==char('Mike') //this is where i think the problem is...
cout << "congrats";
else
cout << "Try again";
}
#include <iostream>
int main()
{
std::string name;
std::cout << "Type my name is:";
std::cin >> name;
if (name == "Mike") // Compare directly to the string "Mike"...
std::cout << "congrats";
else
std::cout << "Try again";
}
Я думаю, что всегда лучше использовать std::
вместо using namespace std
.
Вы пытались использовать std :: string в c++?
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Type my name is:";
cin >> name;
if (name == "Mike"))
cout << "congrats";
else
cout << "Try again";
}
Ваша проблема в том, что char
- это символьная переменная, а не массив символов. Если вы хотите создать "c-строку" (набор символов), используйте char name[20]
. Чтобы создать строковый объект, используйте string name
. Не забудьте #include <string>
. Вот краткое руководство для строк: http://www.cplusplus.com/doc/tutorial/ntcs/
Если вы хотите использовать c-строки, вам нужно использовать strcmp(name,"Mike")
для сравнения двух строк. Он возвращает true, если две строки являются РАЗЛИЧНЫМИ, поэтому будьте осторожны.
#include <iostream>
using namespace std;
int main()
{
char name[20];
cout << "Type my name is:";
cin >> name;
if (!strcmp(name,"Mike")) //C string equality tester
cout << "congrats";
else
cout << "Try again";
}
Строки проще в использовании, потому что вы можете просто использовать оператор равенства ==
.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Type my name is:";
cin >> name;
if (name == "Mike") //Tests for equality using strings
cout << "congrats";
else
cout << "Try again";
}
Кроме того, смотрите свои кавычки. Одиночные кавычки ('a'
) предназначены для символов, двойные кавычки ("Mike"
) предназначены для массивов символов (слов, предложений и т.д.),
true
. Возвращает число больше нуля или меньше нуля, если первая строка больше или меньше, соответственно, чем вторая. Строки C ++, кроме того, что они более просты в использовании, также не открывают программу для переполнения буфера, когда пользователь вводит более 20 символов.
char
- это единственный символ, замените весь свой char
на std::string
и добавьте #include <string>
в начало вашего кода. std::string
будет сохранять строки произвольной длины.
if
за ним следуют фигурные скобки: if(...)
. В вашем случае if(name == char('Mike'))
или с советом сверху, if(name == std::string('Mike'))
.
В C и C++ две цитаты '
и "
разные. Вы можете использовать '
для отдельных символов и "
строк. Поэтому это должно быть, if(name == std::string("Mike"))
.
Вы также можете написать if(name == "Mike")
.
Также вы должны сделать скобки, чтобы повысить читаемость и избежать ошибок. После if(...)
вы обычно используете {}
для инкапсуляции инструкций, которые должны выполняться, если выполняется условие if(...)
. Ваш случай особенный, потому что скобки могут быть опущены для отдельных инструкций.
if(...)
{
...
}
else
{
...
}
int main()
{
string name;
string myname("Mike");
cout << "Type my name is:";
cin >> name;
if(name ==myname) //this is where i think the problem is...
{
cout << "congrats";
}
else
cout << "Try again";
}
Это должно сделать это. Но я уверен, что вы не захотите жестко запрограммировать "Майк" ТОЛЬКО. Хорошим улучшением было бы получить имена из файла, а затем сравнить. Также имейте в виду, что оператор string == чувствителен к регистру, поэтому "Майк"! = "Майк"
if
быif
имел квадратные скобки, и фигурные скобки тоже помогли бы). Просто используйтеstd::string
и сравните его, как и все остальное.