请帮助理解我的简单c++代码有什么问题
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
string s = "qwertyuiopasdfghjklzxcvbnm";
string match = "w";
int n = s.length();
char char_array[n + 1];
strcpy(char_array, s.c_str());
for (int i = 0; i < n; i++)
if (match.compare(char_array[i]) == 0) {
cout << char_array[i];
}
return 0;
}
我收到一个错误:
错误:从' char '到' const char* '的转换无效[-fpermissive]
请帮助将char转换为*char并正确比较它们
在你给出的例子中有两个错误。
错误1
你已经写了语句:
char char_array[n + 1]; //since n is not a compile time constant so this is not standard C++
在c++中,数组的大小必须是编译时常量. 所以你不能写这样的代码:
int n = 10;
int arr[n]; //incorrect
正确的写法是:
const int n = 10;
int arr[n]; //correct
错误2
您正在尝试将char
转换为const char*
,如compare()
方法中的错误所示。
如果你只是想知道一个给定的字符是否出现在std::string
中,那么有2个选项/解决方案(可能更多)。
解决方案1
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "qwertyuiopasdfghjklzxcvbnm";
char match = 'w'; //use char instead of std::string
for (int i = 0; i < s.length(); i++)
if (s[i] == match) {
cout << "element: "<< match <<" found at index: "<<i<<std::endl;
}
return 0;
}
如上面的解决方案1所示,您不需要创建单独的数组。
解决方案2
您可以使用std::string::find
在另一个字符串中查找给定的子字符串。这看起来像:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "qertyuiowpasdfghjklzxcvbnm";
std::string match = "w"; //using std::string instead of char
std::size_t index = s.find(match);
if(index != std::string::npos)
{
std::cout<<"string: "<<match<<" found at index: "<<index<<std::endl;
}
else
{
std::cout<<"string: "<<match<<" not found"<<std::endl;
}
return 0;
}
解决方案2的输出如下图所示。
解决方案3
#include <iostream>
#include <string>
int main()
{
std::string s = "qertyuiopasdfwghjklzxcvbnm";
std::size_t index1 = s.find_first_of('w');
if(index1 != std::string::npos)
{
std::cout<<"found at index: "<<index1<<std::endl;
}
else
{
std::cout<<"not found"<<std::endl;
}
return 0;
}
正如错误中所述,您无法将单个字符转换为字符串。但是您可以使用std::string(size_t , char )
构造函数。
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
string s = "qwertyuiopasdfghjklzxcvbnm";
string match = "w";
int n = s.length();
char char_array[n + 1];
strcpy(char_array, s.c_str());
for (int i = 0; i < n; i++)
if (match.compare(string(1, char_array[i])) == 0) {
cout << char_array[i];
}
return 0;
}