代码是从文本文件中读取指令并打印出图形模式。一个是我的功能不正常。该函数用于读取我从文件中获取的字符串向量到结构。
下面是我的输出,我的第二,第三和第六个图表是错误的。似乎第2和第3个向量没有输入正确的行号和列号;最后一个跳过" e"按字母顺序排列。 我试图多次调试但仍然无法找到问题。
typedef struct Pattern{
int rowNum;
int colNum;
char token;
bool isTriangular;
bool isOuter;
}Pattern;
void CommandProcessing(vector<string>& , Pattern& );
int main()
{
for (int i = 0; i < command.size(); i++)
{
Pattern characters;
CommandProcessing(command[i], characters);
}
system("pause");
return 0;
}
void CommandProcessing(vector<string>& c1, Pattern& a1)
{
reverse(c1.begin(), c1.end());
string str=" ";
for (int j = 0; j < c1.size(); j++)
{
bool foundAlpha = find(c1.begin(), c1.end(), "alphabetical") != c1.end();
bool foundAll = find(c1.begin(), c1.end(), "all") != c1.end();
a1.isTriangular = find(c1.begin(), c1.end(), "triangular") != c1.end() ? true : false;
a1.isOuter = find(c1.begin(), c1.end(), "outer") != c1.end() ? true : false;
if (foundAlpha ==false && foundAll == false){
a1.token = '*';
}
//if (c1[0] == "go"){
else if (c1[j] == "rows"){
str = c1[++j];
a1.rowNum = atoi(str.c_str());
j--;
}
else if (c1[j] == "columns"){
str = c1[++j];
a1.colNum = atoi(str.c_str());
j--;
}
else if (c1[j] == "alphabetical")
a1.token = 0;
else if (c1[j] == "all"){
str = c1[--j];
a1.token = *str.c_str();
j++;
}
}
}
答案 0 :(得分:0)
在调试(或发布)代码之前,您应该尝试使其更清晰。它包含许多奇怪/不必要的部分,使您的代码更难理解(并导致您刚才描述的错误行为)。
例如,您在开头有一个if:
if (foundAlpha ==false && foundAll == false){
如果没有alpha和all命令,则对于整个循环长度,这将始终为true,其他命令都放在else if
语句中。 他们不会被执行。
因此,在第二个和第三个示例中,除isTriangular
和isOuter
标志外,不会读取任何命令。
请考虑以下更改,而不是像这样的混合结构:
token
初始化为*
,则可以删除该if,甚至是它所需的两个bool
变量。bool
移动到与其他结构相同的结构。 (或者如果你真的想保留这个find
查找,请在for循环之前移动它们 - 你只需要设置它们一次!)不修改你的循环变量,这是一个错误的磁铁!好的,这个规则有一些罕见的例外,但这不是其中之一。
而不是str = c1[++j];
,稍后递减,你可以写str = c1[j+1]
reverse
吗?这使得您的相对+/- 1索引不清楚。例如,原始命令字符串中的c1[j+1
为j-1
。关于最后一个:这可能是您outer
打印代码中的一个错误,您没有发布该错误。