从字符串c ++的末尾开始按字符分割

时间:2016-03-21 15:12:43

标签: c++ split

我正在尝试使用完整路径从字符串文件名创建一些文件夹。

- (void) handleTap:(UIGestureRecognizer*)gestureRecognize{
  // retrieve the SCNView
  SCNView *scnView = (SCNView *)self.view;

  // check what nodes are tapped
  CGPoint p = [gestureRecognize locationInView:scnView];
  NSArray *hitResults = [scnView hitTest:p options:nil];

  // check that we clicked on at least one object
  if([hitResults count] > 0){
      // retrieved the first clicked object
      SCNHitTestResult *result = [hitResults objectAtIndex:0];

      // get its material
      SCNMaterial *material = result.node.geometry.firstMaterial;

      // highlight it
      //[SCNTransaction begin];
      //[SCNTransaction setAnimationDuration:0.5];

      // on completion - unhighlight
      [SCNTransaction setCompletionBlock:^{
          [SCNTransaction begin];
          [SCNTransaction setAnimationDuration:0.5];

          material.emission.contents = [UIColor blackColor];

          [SCNTransaction commit];
      }];

      material.emission.contents = [UIColor redColor];

  [SCNTransaction commit];
  }
}

为此,我需要解析字符串并删除文件名。我想要做的是从后面拆分字符串,以便我可以从创建的目录名称中删除文件名。

以下是我到目前为止的情况。我将字符串拆分为“/”,然后对其进行改造,除了数组的最后一个元素。

    string str = "c:/temp/tmp/test.txt";
    File_data data;

虽然上面的代码在技术上有效,但我仍然需要在启动前清空 char strArray[1000]; strncpy(strArray, str, sizeof(strArray)); char* objectArray[100] = {0}; unsigned int index = 0; unsigned int secondIndex = 0; objectArray[index] = strtok(strArray, "/"); while(objectArray[index] != 0) { ++index; objectArray[index] = strtok(0, "/"); } while(objectArray[secondIndex] != 0) { if ((secondIndex - 1) != index) { data.name += objectArray[secondIndex]; data.name += "/"; } ++secondIndex; } 。我希望有一种更简单的方法来完成所有这些,这样我就可以从字符串中删除文件名,并从其余部分创建一个目录结构。

1 个答案:

答案 0 :(得分:1)

使用substr并从string中查找函数。 Substr获取位置和长度并返回子字符串。 Find需要一个char或string值来检查并将迭代器返回给实例(分别找到第一个和最后一个实例的第一个和最后一个)。

在代码中执行以下操作:

auto pos = path.find_last_of ('/');
if (pos != string::npos) {
    directory = path.substr (0,pos);
    file = path.substr (pos);
}

在手机上这样做,为丑陋的回答道歉! :P