Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算字符串网格中的字符串短语_C++_String_C++11_Vector_Data Structures - Fatal编程技术网

C++ 计算字符串网格中的字符串短语

C++ 计算字符串网格中的字符串短语,c++,string,c++11,vector,data-structures,C++,String,C++11,Vector,Data Structures,您将获得一个n*m网格,其中包含小写英文字母。短语“saba”在网格中水平、垂直和对角出现多少次 水平、垂直和对角计数 #include<iostream> #include <vector> #include <string> using namespace std; int TotalCount(vector<string> Str, int ItemCount) { string Text = "saba"; string Vertical

您将获得一个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(&currentRow.at(0));
    DiagonalOneString = DiagonalOneString.append(&currentRow.at(i));
    DiagonalTwoString = 
    DiagonalTwoString.append(&currentRow.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;
}

似乎VerticalString复制整个字符串,而不是在指定位置复制字符。我没有得到预期的计数。有人能告诉我为什么计数出错吗?

当您的垂直字符串为
saba
时,
count
将递增。但是,对于相同的命中率,
count
将在垂直字符串为
sabas
时再次增加

此外,您可能打算搜索对角线,而不仅仅是两个角之间的对角线。只看两条对角线可以忽略有效点击。可能需要阅读两个方向

我的建议是将问题分解为计算每个水平行的命中数、计算每个垂直行的命中数(可以转换矩阵并重新使用第一个函数)、计算对角线(从东北到西南),最后计算对角线(从西北到东南)。也就是说,为每个函数指定一个新函数,并对结果求和


打印您正在测试的字符串也将极大地帮助您进行调试。

与您的问题无关,但您知道向量中的元素数在向量本身中吗?并且它可以通过例如
Str.size()
获得?这意味着您不需要将向量的大小作为参数传递给函数调用。是的,很抱歉,我完全忘记了这一点。谢谢!:-)
Sample Input
5 5
safer
amjad
babol
aaron
songs

Expected Output
2