【发布时间】:2021-12-12 05:50:29
【问题描述】:
我正在制作一个程序来查找一行包含多少字谜来完成家庭作业,但我遇到了一个问题。我的程序没有进入一个简单的“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;
}
提前谢谢你!
【问题讨论】:
-
在'cout
-
void breakStringToWords(string str, vector<string> w)-- 您正在通过值传递w,这意味着它是临时的。当该函数返回时,您在w上所做的所有工作都会化为乌有。 C++ 不是 Java 或任何其他使用引用语义的语言。 -
当前行输入的字数:)
-
这
if不好,因为 i 以 0 开头 ``` if (isAnagram(v[i - 1], v[i]))``` 这会导致v[i - 1]越界。