2011-05-23 63 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字節的字段不能長時間掃描,可以嗎?

如果查找名稱的末尾,我會從字符串的末尾開始,並反向掃描,直到第一個非空格。