2011-02-09 87 views
1

我建立我自己的String類 ,我想寫我自己的替代方法的類替換子字符串(C++)內

但是我不知道怎麼弄的位置(INT )在字符串中出現的第一個子字符串。

我的替換方法應該有2個參數,String searchString,String newString。它的工作原理是這樣的

String example="AppLe"; 

example.replace("L", "banana"); 

我需要以某種方式獲得L內的示例字符串的位置。因爲我的替換函數的結果是「Appbananae」

請注意我正在編寫自己的String類,因爲我在學校學習了一個面向對象的編程課程來學習類。因此,我不能使用標準庫字符串類中的「find()」,因爲這會破壞目的。非常感謝

+2

介紹[for-loop](http://en.wikipedia.org/wiki/For_loop)。 – Marlon 2011-02-09 01:23:57

+3

*「我正在建立自己的絃樂班,並...」*哦,我的,不是再... – Oystein 2011-02-09 01:43:26

回答

1

假設您的字符串類將當前值存儲在ASCIIZ緩衝區中,則可以使用strstr()

2

雖然這可能不是直接幫助,但它是實用的:我建議使用標準庫字符串,而不是嘗試構建自己的類。這需要時間,並且肯定會出錯。

+3

人們經常編寫字符串類作爲學習練習。 – 2011-02-09 01:48:31

0

請注意我正在編寫自己的String類,因爲我在學校學習了一個面向對象的編程課程來學習類。因此,我不能使用標準庫字符串類中的「find()」,因爲這會破壞目的。

它不會是有意義的使用標準庫string類,但它確實是有意義的使用容器無關的算法:

template<class ForwardIterator1, class ForwardIterator2> 
ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, 
         ForwardIterator2 first2, ForwardIterator2 last2); 

template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 
ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, 
         ForwardIterator2 first2, ForwardIterator2 last2, 
         BinaryPredicate pred); 

返回:第一個迭代我在範圍[first1,last1 - (last2 - first2)),使得對於任何小於last2 - first2的非負整數n,下列對應條件成立:*(i + n)== *(first2 + n),pred(* (i + n),*(first2 + n))!= false。如果沒有找到這樣的迭代器,則返回last1。

[來源:C++ 03§25.1.9]

的std ::搜索不正是你想做的事。如果你仍然不被允許使用容器不可知的算法,那麼你可以用一個新名字自己實現std :: search並使用它。 (對std :: search的這種預防正是因爲你可以完全模仿它,而不依賴於你的String類的任何細節),所以對std :: search的預防是正確的。)

這是一個天真(意義明顯,它的工作原理,但也許更慢比可能的)實現:

template<class IterA, class IterB> 
IterA search(IterA a_begin, IterA a_end, IterB b_begin, IterB b_end) { 
    for (IterA start = a_begin; start != a_end; ++start) { 
    IterA a = start; 
    for (IterB b = b_begin; a != a_end; ++b, ++a) { 
     if (b == b_end) return start; 
     if (*b != *a) break; 
    } 
    } 
    return a_end; 
} 

注意它更詳細的調用的std ::等於從此實現,因爲你不知道距離(b_begin,b_end)< =距離(a_begin,a_end),和std: :平等有這個要求。