2016-11-29 32 views
2

我想檢查字符是否存在於向量中,如果是,就得到它的編號。我已經完成了第一部分(檢查是否存在字符):獲取在向量中的字符位置(C++)

char letter(a); 
string word; 
vector<char>vWord(word.begin(), word.end()); 
if(find(vWord.begin(), vWord.end(), letter) != vWord.end()){}  

但我不知道如何獲得該位置。任何幫助表示讚賞。

+3

您可以簡單地使用['std :: string :: find'](http://en.cppreference.com/w/cpp/string/basic_string/find),它將返回索引 –

+0

'int index = std :: find(vWord.begin(),vWord.end(),letter) - vWord.begin();' – George

+0

@KarstenKoop:你應該做出答案。 –

回答

2

保存迭代器,並做一些關於它的計算方法如下:

vector<char>::iterator itr = find(vWord.begin(), vWord.end(), letter); 
if(itr != vWord.end()) 
{ 
    int index = itr - vWord.begin(); 
} 

但是千萬注意,std::string已經有一個find方法。

1

你快到了。你已經有指向該字符(由find返回)迭代器,所以你可以使用std::distance找到距離:

char letter(a); 
string word; 
vector<char>vWord(word.begin(), word.end()); 
auto it = find(vWord.begin(), vWord.end(), letter); 
if (it != vWord.end()) 
{ 
    size_t index = std::distance(vWord.begin(), it); 
} 

對於隨機訪問迭代器(如由std::vector使用),std::distance(a, b)是一個常數並通過做b - a來實施。

備註:您可以直接在std::string上做std::find和迭代器操作;它本身就是一個非常好的容器。

+0

古老的使用'-'與'std :: distance'。 –

+1

你應該使用'auto',而不是'size_t'。這個問題在這個問題中可能不是問題,但是'std :: distance'的一些用法可以返回一個負數,迭代器的'difference_type'可能是一個有符號的整數。 – Xirema

+1

@Xirema在* this *的情況下,'std :: distance'不可能返回一個負數,並且有一個指向size_t以外的容器的索引可能會有它自己的問題。 – Angew