2017-04-21 118 views
-8

我的問題基本上是這樣的:如何退出循環並再次繼續循環?

我需要一種方法來擺脫for循環的在櫃檯的一個特定的值,然後重新又回到了循環並繼續循環。我在C++中需要這種方式。

這裏我試着詳細闡述我的問題。

我知道有一些棘手這樣做的方法,但我所尋找的是這種方式;我的意思是我在報價中討論的方式。

更具體地講,我有一個整數數組,我想補充一個整數稱爲小號(作爲搜索號),我想它做線性搜索,找到小號陣列的細胞內。我可能會發現兩個單元格具有相同的編號;所以我可以編寫一個代碼,從第0個單元開始,在第4個單元中搜索,找到s,最後顯示輸出:第4個。接下來,我想要的是,它然後退出循環,並且執行花式走出循環,然後回到循環繼續與其他單元格。再一次,它可能在單元格9中找到另一個,顯示第九個作爲輸出,並且直到循環結束時執行相同操作。

+3

是的。你爲什麼認爲你不能在循環中使用std :: cout? – MrPromethee

+0

我想讓它走出循環,然後回去,但從前一個計數器繼續。我必須編輯這個問題,我很抱歉。 – parvin

+0

如果你需要幫助,你將不得不向我們展示實際的代碼。 – MrPromethee

回答

-1

是的。可以辦到。但首先,我想告訴你簡單而優雅的解決方案:

std::vector<int> v = {....}; 
int to_search = ...; 

for (auto elem : v) 
{ 
    if (e == to_search) 
    { 
    // do something 
    } 
} 

你確定這是不是你的實際需要?


我們您的實際需求:

template <class It, class T> 
It find_next(It begin, It end, T to_search) 
{ 
    for (auto it = begin; it != end; ++it) 
    { 
     if (*it == to_search) 
     return it; 
    } 
    return end; 
} 
std::vector<int> v = {....}; 
int to_search = ...; 

auto it = v.begin(); 

while ((it = find_next(it, v.end(), to_search)) != v.end()) 
{ 
    // do something with *it 
} 

你真要使用索引,可以很容易地適應:

int find_next(const std::vector<int>& v, int begin, int end, int to_search) 
{ 
    for (int i = begin; i != end; ++i) 
    { 
     if (v[i] == to_search) 
     return i; 
    } 
    return end; 
} 
std::vector<int> v = {....}; 
int to_search = ...; 

int from = 0; 

while ((from = find_next(v, from, v.size(), to_search)) != v.size()) 
{ 
    // do something with v[from] 
} 

現在,如果你真的想生的循環,而不是功能,當然這也可以做:

std::vector<int> v = {....}; 
int to_search = ...; 

int from = 0; 

while (true) 
{ 
    for (; from < v.size(); ++from) 
    { 
    if (v[from] == to_search) 
     break; 
    } 

    if (from == v.size()) 
     break; 

    // do something with v[from] 
} 

我希望你能看到每個迭代我呈現給大家基本上做同樣的事情會變得更加複雜。

所以我真的會重新考慮,如果我給你看的第一個不是你想要的。


免責聲明:沒有編制,沒有測試

+2

你有一個錯字:它應該是'v.end()',而不是'while.e'(條件)中的'it.end()' – SingerOfTheFall

+0

我犯了一個錯誤嗎?很可能,我有點匆忙。如果不是,我很想知道爲什麼你不喜歡這個答案。 @SingerOfTheFall ty,糾正。 – bolov

0
兩種方法

例子,假設它是你感興趣的索引

調用函數當一個元素被發現:

void search(const std::vector<int>& v, int x, std::function<void(int)> index_handler) 
{ 
    for (int i = 0; i < v.size(); ++i) 
    { 
     if (v[i] == x) 
     { 
      index_handler(i); 
     } 
    } 
} 

讓呼叫者確定起始點(如std::string::find):

int search_2(const std::vector<int>& v, int x, int start) 
{ 
    for (int i = start; i < v.size(); ++i) 
    { 
     if (v[i] == x) 
     { 
      return i; 
     } 
    } 
    return -1; 
} 

實施例使用:

int main() 
{ 
    // Method 1 
    std::vector<int> vs = { 1, 2, 1, 2, 1, 2, 3}; 
    search(vs, 2, [](int i) { std::cout << "found at index " << i << '\n'; }); 

    // Method 2 
    int index = search_2(vs, 2, 0); 
    while (index >= 0) 
    { 
     std::cout << "found at index " << index << '\n'; 
     index = search_2(vs, 2, index + 1); 
    } 
} 

第二種方法更靈活,但也MESSIER和更容易出錯。

0

這裏就是我想:


int A[6],s; 

for(int i=0;i<6;i++) 
cin >> A[i]; 

cout << endl << " type search number : "; 
cin>>s; 
cout<<"the number : "; 
int j; 
j=0; 
label1: 
if(A[j]==s) 
{ cout<<A[j]<<" is "<<j<<"th "; goto label2;} 
else 
{j++; 
goto label1; 
} 
label2: 
for(int i=j+1;i<6;i++) 
{ 
    if(A[i]==s) 
    cout<<" and is "<<i<<"th "; 
} 


    cout<<"...cell in the array"; 

感謝大家的幫助。

+1

這是一個很好的答案。謝謝。 – Kiarash