我正在制作一個程式,用于查找一行包含多少個字謎作為家庭作業,但我遇到了問題。我的程式沒有進入一個簡單的“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;
}
先感謝您!
uj5u.com熱心網友回復:
這是一個錯誤:
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
}
同樣的問題,同樣的解決方案——通過參考傳遞。
uj5u.com熱心網友回復:
關于:
它進入回圈并拋出另一個例外
當 i 為 0 時,您正在訪問v[-1]:
for(int i=0; i<sz; i )
{
cout<<4<<endl;
if (isAnagram(v[i - 1], v[i]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/337797.html
