2011-05-23 74 views
0

首先,这个问题的解决方案需要非常高效。C++,搜索APT_String和效率

我的问题是我需要比较两个APT_String s(DataStage类型)的某些部分。也就是说,字符串是包含空格字符的姓氏,例如“Brown Marrow”。但是,名称位于30字节的字段中,其余空间填充空格字符。

简而言之,我需要找到两个连续空格字符的第一个实例(以表示有用的姓氏的结束)。我的解决办法是

bool foundit = false;

for (int ind = 0; ind<=q_array[i].LAST_NAME.length() && !foundit; ind++) { if (q_array[i].LAST_NAME[ind] == ' ' && q_array[i].LAST_NAME[ind+1] == ' ') { cout<<"two spaces in a row at char " << ind << endl;

foundit = true;

}
}

不幸的是,APT_String似乎没有find(),或者我会使用它。有没有人有更好或更有效的方式来做到这一点?

回答

0

再一次,如果你想知道某些字符是否在字符串中,你需要遍历它。没有其他的机会,即使findstrcmp和whatelse这样做。没有机会围绕这个循环的东西。

现在,您可以随时将APT_String包装在您自己的myAPT_String类中,该类还有一个需要管理的size_t string_size成员,并使用它来跳转到字符串的末尾。

+0

问题的效率部分假定find是一个非常精炼的方法,因为它包含在C++的字符串类中。我知道它会遍历字符串,但我只是想知道是否有更好的方法来做到这一点,而不是我所做的。你为什么说“再次”?你的行为就好像我之前问过这个问题... – user898763452 2011-05-23 18:15:12

+0

@autotravis - 你不是唯一一个在这里提问的人。 :-)如果不查看单个字符,没有什么魔法可以查看字符串中的内容。 std :: string有大约100个函数太多,所以这不是一个好的模型。 – 2011-05-23 18:32:57

+0

@auto:关于知道在字符串中的什么位置的问题经常被问到。 ;) – Xeo 2011-05-23 23:08:13

0

一个30字节的字段不能长时间扫描,可以吗?

如果查找名称的末尾,我会从字符串的末尾开始,并反向扫描,直到第一个非空格。