gpt4 book ai didi

c++ - 计算 String Grid 中的字符串短语

转载 作者:行者123 更新时间:2023-11-28 04:17:41 25 4
gpt4 key购买 nike

给你一个 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;
}

输入格式

第一行:两个整数n和m,其中n表示(1 <= n,m <= 100)行数,m表示网格中的列数接下来n行:每行必须包含一个长度为m的字符串,只包含小写英文字母

Sample Input
5 5
safer
amjad
babol
aaron
songs

Expected Output
2

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

最佳答案

当你的垂直字符串是saba时,count会递增。但是当您的垂直字符串是 sabas 时,count 将再次增加,以获得相同的命中。

此外,您可能打算搜索除两个角之间的对角线之外的对角线。仅查看 2 条对角线可能会忽略有效命中。并且可能需要阅读两个方向。

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

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

关于c++ - 计算 String Grid 中的字符串短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56243099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com