C++:点后提取字符串

Posted

技术标签:

【中文标题】C++:点后提取字符串【英文标题】:C++: Extract string after dot 【发布时间】:2014-04-05 14:07:16 【问题描述】:

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

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

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

【问题讨论】:

使用std::stringstring.find("."):cplusplus.com/reference/string/string/find @Violet:实际上,rfind 更好,因为他想要文件扩展名,通常在最后一个目录分隔符之后的最后一个'.' 开始... How to get file extension from string in C++的可能重复 【参考方案1】:

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 作为答案。

【讨论】:

【参考方案2】:

这会起作用,但你必须确保给它一个带点的有效字符串。

#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】:

string::find 方法将返回字符串中第一次出现的字符,而您想要最后一次出现。

你更有可能使用string::find_last_of 方法: 参考:http://www.cplusplus.com/reference/string/string/find_last_of/

【讨论】:

【参考方案4】:

这是一个简单的 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);


您可以以此为起点。

【讨论】:

以上是关于C++:点后提取字符串的主要内容,如果未能解决你的问题,请参考以下文章

C++提取字符串里面的数字

文件输入,试图从字符串中提取 Int(C++)

C++ - 如何在字符串中提取有效字符串?

从字符串 C++ 中提取某些整数

在 C++ 中拆分点上的字符串并从中提取所有字段?

使用正则表达式在 C++ 中提取匹配的字符串