【发布时间】:2019-05-21 16:55:47
【问题描述】:
给定一个 n*m 网格,其中包含小写英文字母。短语“saba”在网格中水平、垂直和对角出现了多少次?
水平、垂直和对角计数。
#include<iostream>
#include <vector>
#include <string>
using namespace std;
int TotalCount(vector<string> Str, int ItemCount)
{
string Text = "saba";
string VerticalString = "";
string DiagonalOneString = "";
string DiagonalTwoString = "";
int count = 0;
for (int i = 0; i < ItemCount; ++i)
{
string& currentRow = Str[i];
VerticalString = VerticalString.append(¤tRow.at(0));
DiagonalOneString = DiagonalOneString.append(¤tRow.at(i));
DiagonalTwoString =
DiagonalTwoString.append(¤tRow.at(currentRow.length() - 1 - i));
if ((currentRow.find(Text) != string::npos) || (VerticalString.find(Text) != string::npos) || (DiagonalOneString.find(Text) != string::npos) || (DiagonalTwoString.find(Text) != string::npos))
{
count++;
}
}
return count;
}
int main()
{
int total = 0;
int row;
cin >> row;
vector<string> rows;
// read each row and append to the "rows" vector
for (int r = 0; r < row; r++)
{
string line;
cin >> line;
rows.push_back(line);
}
cout << TotalCount(rows, row);
return 0;
}
输入格式
第一行:两个整数n和m,其中n表示(1
Sample Input
5 5
safer
amjad
babol
aaron
songs
Expected Output
2
看起来 VerticalString 复制了整个字符串,而不是复制指定位置的字符。我没有得到预期的计数。有人可以告诉我为什么计数会出错吗?
【问题讨论】:
-
与您的问题无关,但您知道向量中的元素数量在向量本身中吗?它可以通过例如获得
Str.size()?这意味着您不需要将向量的大小作为参数传递给函数调用。 -
是的,对不起,我完全忘记了这一点。谢谢! :-)
标签: c++ string c++11 vector data-structures