我的功能如下:
int main(int argc, char *argv[])
{
}
我想在argv[1]
中找到一个字符(点字符)。我尝试将char*
转换为如下字符串:
std::string para2="";
if(argc==2 && argv[1]!=NULL)
{
para2 = string(argv[1]);
}
但para2
使用print命令显示奇怪的字符,并且查找功能无法正常工作。请指导我如何在char*
类型中找到字符。
由于
答案 0 :(得分:1)
以下是一些注意事项:
注意#1:
std::string para2="";
构造字符串时,默认构造函数初始化一个空字符串,因此您不需要=""
部分:std::string para2;
就好了。
注意#2:
if(argc==2 && argv[1]!=NULL)
{
para2 = string(argv[1]);
}
当您从char*
分配到std::string
时,您可以使用operator=
重载,而不使用明确的string
部分:
para2 = argv[1];
根据对您的问题的一些评论中的某些请求,您可以使用std::string::rfind
检查某些扩展名,例如:
#include <iostream>
#include <string>
int main(int argc, char * argv[])
{
std::string param2;
if (argc == 2)
{
param2 = argv[1];
}
std::cout << param2 << std::endl;
if (param2.rfind(".jpg") != std::string::npos)
{
std::cout << "JPEG file." << std::endl;
}
}
答案 1 :(得分:0)
您可能正在将EXE构建为UNICODE。
尝试在属性 - >常规
中将“字符集”设置为“使用多字节字符集”答案 2 :(得分:0)
您可能使用错误的printf。您可以使用std :: cout输出para2但不使用printf作为字符串类型。因为printf只能打印出原始类型,如int,double,float,ulong,char,char *等。
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
std::string para2="";
if(argc==2 && argv[1]!=NULL)
{
para2 = std::string(argv[1]);
std::cout<<para2<<std::endl;
}
return 0;
}
您可以参考"printf" on strings prints gibberish和"printf" on strings prints gibberish。
如果要在char *中找到指定的字符串,可以使用strstr()函数来执行此类操作。而string :: find也可以进行查找工作,你可以参考http://www.cplusplus.com/reference/string/string/find/
对于string :: find函数,返回值为size_t类型。返回值返回第一个匹配的第一个字符的位置。如果未找到匹配项,则函数返回string :: npos。
您应该始终使用string :: npos作为检查条件,但不能使用0。