簡體   English   中英

C++ 程序未進入“for”循環

[英]C++ Program is not entering "for" loop

我正在制作一個程序,用於查找一行包含多少個字謎作為家庭作業,但我遇到了問題。 我的程序沒有進入一個簡單的“for”循環。 我整晚都在閱讀,但我不明白問題出在哪里。 我已經放置了 7 個控制 cout-s 來查看它到底在哪里進入,在哪里不進入。 結果是 - 1, 2, 3 ,7 - 甚至沒有進入“for”循環。 可能是什么問題呢? 這是我的代碼:

#include<iostream>
#include<string>
#include <sstream>
#include<vector>
#include <algorithm>
using namespace std;
bool isAnagram(string x, string y)
{
    vector<char>v;
    int szX = x.size(), szY = y.size();
    for (int i = 0; i < szX; i++)
    {
        if (!(find(v.begin(), v.end(), x[i]) != v.end()))
        {
            v.push_back(x[i]);
        }
    }
    for (int j = 0; j < szY; j++)
    {
        if (!(find(v.begin(), v.end(), y[j]) != v.end()))
        {
            return false;
        }
    }
    return true;
}

void breakStringToWords(string str, vector<string> w)
{
    istringstream ss(str);
    string word;
    while (ss >> word)
    {
        w.push_back(word);
    } 
}

int main()
{ 
    string x;
    vector<string>v;
    int cnt=0,sz;
    while(getline(cin, x))
    {
        if(x=="")
        {
            return 0;
        }
        cout<<1<<endl;
        breakStringToWords(x, v);
        cout<<2<<endl;
        sz=v.size();
        cout<<3<<endl;
        for(int i=0; i<sz; i++)
        {
            cout<<4<<endl;
            if (isAnagram(v[i - 1], v[i]))
            {
                cout<<5<<endl;
                cnt++;
            }
            cout<<6<<endl;
        }
        cout<<7<<endl;
        cout<<cnt<<endl;
    }
    return 0;
}

先感謝您!

這是一個錯誤:

void breakStringToWords(string str, vector<string> w)

您正在按值傳遞w ,這意味着breakStringToWords函數正在使用臨時向量。 一旦該函數返回, w就不再存在。

您應該通過引用傳遞,而不是通過值傳遞: void breakStringToWords(string str, vector<string>& w) // Note the &

這與做這樣的事情沒有什么不同:

#include <iostream>
void foo(int x)
{
  x = 10;
}

int main()
{
  int x = 0;
  foo(x);
  std::cout << x; // x is still 0, not 10
}

同樣的問題,同樣的解決方案——通過引用傳遞。

關於:

它進入循環並拋出另一個異常

當 i 為 0 時,您正在訪問v[-1]

    for(int i=0; i<sz; i++)
    {
        cout<<4<<endl;
        if (isAnagram(v[i - 1], v[i]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM