我试图在字符串值中提取文件扩展名部分。
例如,假设字符串值为" file.cpp",我需要提取" cpp"或" .cpp"部分。
我尝试过使用strtok(),但它并没有返回我想要的内容。
答案 0 :(得分:6)
使用find_last_of
和substr
执行该任务:
std::string filename = "file.cpp";
std::string extension = "";
// find the last occurrence of '.'
size_t pos = filename.find_last_of(".");
// make sure the poisition is valid
if (pos != string::npos)
extension = filename.substr(pos+1);
else
std::cout << "Coud not find . in the string\n";
这应该会给你cpp
作为答案。
答案 1 :(得分:1)
string::find
方法将返回字符串中第一次出现的字符,而您想要最后一次出现。
您更有可能在string::find_last_of
方法之后:
参考:http://www.cplusplus.com/reference/string/string/find_last_of/
答案 2 :(得分:1)
这样可以,但你必须确保给它一个带有点的有效字符串。
#include <iostream> // std::cout
#include <string> // std::string
std::string GetExtension (const std::string& str)
{
unsigned found = str.find_last_of(".");
return str.substr( found + 1 );
}
int main ()
{
std::string str1( "filename.cpp" );
std::string str2( "file.name.something.cpp" );
std::cout << GetExtension( str1 ) << "\n";
std::cout << GetExtension( str2 ) << "\n";
return 0;
}
答案 3 :(得分:0)
这是一个简单的C实现:
void GetFileExt(char* ext, char* filename)
{
int size = strlen(filename);
char* p = filename + size;
for(int i=size; i >= 0; i--)
{
if( *(--p) == '.' )
{
strcpy(ext, p+1);
break;
}
}
}
int main()
{
char ext[10];
char filename[] = "nome_del_file.txt";
GetFileExt(ext, filename);
}
您可以将此作为起点。