C ++:点后提取字符串

时间:2014-04-05 14:07:17

标签: c++ string extract strtok

我试图在字符串值中提取文件扩展名部分。

例如,假设字符串值为" file.cpp",我需要提取" cpp"或" .cpp"部分。

我尝试过使用strtok(),但它并没有返回我想要的内容。

4 个答案:

答案 0 :(得分:6)

使用find_last_ofsubstr执行该任务:

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);

}

您可以将此作为起点。