目前我正在使用 C++ 环境开发非常基础的游戏。该游戏曾经是一个学校项目,但现在我已经完成了编程类(class),我想扩展我的技能并在这个旧作业上做得更好。
我已经做了很多让我满意的改变。我已将所有数据集中到文件夹层次结构中,并且已获得读取这些位置的代码。
然而,我的问题源于一个一直困扰着我的非常根本的缺陷。
为了访问我正在使用的图像数据,我使用了代码:
string imageLocation = "..\\DATA\\Images\\";
string bowImage = imageLocation + "bow.png";
问题是,当玩家在游戏板上拿起元素时,我的代码应该使用以下代码:
hud.addLine("You picked up a " + (*itt)->name() + "!");
打印到命令行,“你拿起了弓!”。但相反,它显示“您选择了一个 ..\DATA\Images\!”。
在我集中使用我的数据之前:
name_(item_name.substr(0, item_name.find('.')))
在我的 Item 类构造函数中,将项目名称截断为弓或蜡烛之类的名称。在我更改了数据的结构后,我意识到我必须更改将名称缩减为相同的简单“弓”或“蜡烛”的方式。
我已经更改了上面的代码以反射(reflect)我对数据结构的更改:
name_(item_name.substr(item_name.find("..\\DATA\\Images\\"), item_name.find(".png")))
但不幸的是,正如我之前提到的,这种代码更改并没有像我计划的那样工作。
现在我已经对我的问题进行了冗长的介绍,这是我的问题。
如何提取不需要的两个部分之间的字符串中间部分?此外,您的目标中间部分的长度未知。
非常感谢你们提供的任何帮助。如果您需要更多信息,请询问;我将非常乐意上传部分甚至我的全部代码以获得更多帮助。再次非常感谢。
最佳答案
老实说,您可能从错误的角度来处理这个问题。
您的项目类应该在私有(private)成员中有一个字符串“bow”。然后函数 Item::GetFilePath 将(在运行时)执行“..\DATA\Images\” + this->name + “.png”。
“弓”项目对象的基本属性不是文件名 bow.png,而是它是一个“弓”这一事实。文件名只是派生属性。
关于c++ - 字符串提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367656/