#include <iostream>
using namespace std;
int main()
{
string message;
cout << "Ahlan ya user ya habibi." <<endl;
cout <<"what do you like to do today?" <<endl;
cout <<"please enter the message:" <<endl;
getline(cin,message);
for(int i=0;i<message.size();i++)
{
if(string(message[i]==32))
{
cout<<char(message[i]);
}
else if(string( message[i])>=110)
{
int x = int(message[i])-13;
cout<<char(x);
}
else
{
int x = string (message[i])+13;
cout<<char(x);
}
}
return 0;
}
E:\ my programe \ quiz \ main.cpp | 20 | error:没有匹配函数来调用&#39; std :: __ cxx11 :: basic_string&lt; char&gt; :: basic_string(char&amp;)&#39; |
E:\ my programe \ quiz \ main.cpp | 20 | error:来自&#39; char&#39;的无效转换到#char; char *&#39; [-fpermissive] |
E:\ my programe \ quiz \ main.cpp | 27 | error:没有匹配函数来调用&#39; std :: __ cxx11 :: basic_string&lt; char&gt; :: basic_string(char&amp;)&#39; |
E:\ my programe \ quiz \ main.cpp | 27 | error:来自&#39; char&#39;的无效转换到#char; char *&#39; [-fpermissive] |
答案 0 :(得分:1)
std::string::operator[]
会返回char&
引用。您正在尝试构造具有单个char
值的临时std::string
对象作为输入,但std::string
没有任何构造函数只接受单个char
作为输入。这就是你收到错误的原因。
即使您可以从单个std::string
构建char
,也无法将std::string
与整数进行比较。
您根本不需要所有这些string()
(以及char()
)演员阵容(顺便说一下,您的第一个string()
演员表格格式不正确)。 char
是数字类型。您可以将char
值直接与整数进行比较,并直接在char
值之间添加/减去和整数,以生成新的char
值。
请改为尝试:
#include <iostream>
using namespace std;
int main()
{
string message;
cout << "Ahlan ya user ya habibi." << endl;
cout << "what do you like to do today?" << endl;
cout << "please enter the message:" << endl;
getline(cin, message);
for(int i = 0; i < message.size(); i++)
{
if (message[i] == 32)
{
cout << message[i];
}
else if (message[i] >= 110)
{
char x = message[i] - 13;
cout << x;
}
else
{
char x = message[i] + 13;
cout << x;
}
}
return 0;
}