C++ 从字符串中删除子字符串

C++ 从字符串中删除子字符串,c++,string,C++,String,我有一个代表文件名的字符串,我想删除扩展名,所以删除。。最好的办法是什么?谢谢。如果您使用的是Windows,以下功能将完成此功能: std::wstring StripFileExtension(std::wstring fileName) { WCHAR tempBuffer[MAX_PATH]; if (fileName.empty()) { return TEXT(""); } wcscpy(tempBuffer, fileName.c_str());

我有一个代表文件名的字符串,我想删除扩展名,所以删除。。最好的办法是什么?谢谢。

如果您使用的是Windows,以下功能将完成此功能:

std::wstring StripFileExtension(std::wstring fileName)
{
  WCHAR tempBuffer[MAX_PATH];

  if (fileName.empty())
  {
    return TEXT("");
  }

  wcscpy(tempBuffer, fileName.c_str());
  PathRemoveExtension(tempBuffer);

  return tempBuffer;
}

您可以使用std::string,并将每个字符复制到新字符串中

std::string name = "filename.jpg", newname ="";
int thelength = 0;
for(int i=name.length();i>0;i--){
    if( name[i] != '.'){
           thelength++;
    }
    else{
        break;
    }
}
for(int i=0;i<(name.length()-thelength);i++){
    newname+=name[i];
}

以下代码可用于相同的目的

int npos = str.find_last_of('.');
str = str.substring(0,npos);

如何回答OP问题?我忘了检查“.”这仍然不能正确回答问题;具有两个扩展名的文件名将同时丢失这两个扩展名。根据询问者的需要,这可能不是预期的行为。仍然不存在。。。您将复制真正的文件扩展名并向后复制,看起来像是,但在它之前删除所有内容。请在请求帮助时显示一些您尝试过的内容。那么,file.tar.gz如何?您还需要处理这个问题吗?谢谢大家,因为我在Windows上,所以我将使用此就绪功能。@user2370139请接受我的回答。我很高兴这对你有用@用户2370139这是相当短视的。如果你能写可移植的代码,为什么还要写不可移植的呢?@juanchopanza虽然这通常是准确的,但我认为这在很大程度上取决于你的用例。我从我维护的一个仅限Windows的应用程序中提取了该函数,该应用程序与Windows API紧密相连。在这种情况下,我宁愿知道我是在为操作系统提供标准行为,而不是提供可移植代码。当然,我不能代表user2370139的用例说话。