c++中简单字符串数组上的 Char转换



请帮助理解我的简单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;
}

相关内容

  • 没有找到相关文章

最新更新