使用数组(字符串)C

Work with arrays (string) C

本文关键字:字符串 数组      更新时间:2023-10-16

这是算法Malgrange的beta测试代码,我需要从C0创建数组Y1…(Y1 = C0 - X0)

#include <iostream>
using namespace std;
int main()
{
// create array C0
string** masiv_C0=new string*[3];
for (int i=0;i<3;i++)
    masiv_C0[i]=new string [2];
masiv_C0[0][0]="AB";
masiv_C0[0][1]="C";
masiv_C0[1][0]="X";
masiv_C0[1][1]="Z";
masiv_C0[2][0]="XY";
masiv_C0[2][1]="ZQ";
//create array X0 
string** masiv_X0=new string*[1];
masiv_X0[i]=new string [2];
masiv_X0[0][0]="X";
masiv_X0[0][1]="Z";
//create array Y1 = C0 - X0 (remove from C0 elements X0)
bool flag;
string** masiv_Y1=new string*[3];
for (int i=0;i<3;i++)
    masiv_Y1[i]=new string [2];
for (int i=0;i<3;i++)
{
    flag=true;
    for (int j=0;j<3;j++)
    {
        if ((masiv_C0[i][0]==masiv_X0[j][0])&&(masiv_C0[i][1]==masiv_X0[j][1]))
        {
            flag=false;
            break;
        }
    }
    if (flag)
    {
        masiv_Y1[i][0]=masiv_C0[i][0];
        masiv_Y1[i][1]=masiv_C0[i][0];
    }
}
for (int i=0;i<3;i++)
{
    for (int j=0;j<2;j++)
    {
        cout<<masiv_Y1[i][j];
    }
    cout<<endl<<endl;
}}

当然,算法还没有最终确定,大部分代码不在这里,但问题是这个错误,我不能创建一个数组没有包含在其他元素的子集中的元素

如果你发布了正确的输出应该是什么,这将是有帮助的。

然而,根据你的描述,如果你使用STL容器和算法来做任何类型的元素删除,因为数组不能调整大小,它将更好地服务。例如,std::vector类充当元素的动态数组。

你的代码试图通过重写先前的元素来"调整"数组的大小,这在使用std::vector时是不必要的,因为使用vector,你实际上是在删除元素,而不仅仅是重写数组中的项。

这是一个使用std::vector的代码实现,以及一些STL算法来完成这项工作(再次,我将按照你在你的帖子中的描述):

首先使用必要的头文件:

#include <vector>
#include <string>
#include <algorithm>

接下来,为了方便,我们创建一些typedefs

typedef std::vector<std::string> String1D;  // a 1 dimensional "array" of string
typedef std::vector<String1D> String2D;  // a 2 dimensional "array" of string
现在我们有了上面的内容,创建二维数组就很简单了,不需要使用new[]:
int main()
{
    // create array C0
    String2D masiv_C0(3, String1D(2));
    masiv_C0[0][0]="AB";
    masiv_C0[0][1]="C";
    masiv_C0[1][0]="X";
    masiv_C0[1][1]="Z";
    masiv_C0[2][0]="XY";
    masiv_C0[2][1]="ZQ";
    //create array X0 
    String2D masiv_X0(1, String1D(2));
    masiv_X0[0][0]="X";
    masiv_X0[0][1]="Z";

接下来,我们简单地创建一个"Y"二维数组,首先从masiv_C0数组开始:

String2D masiv_Y1 = masiv_C0;

一旦我们有了这个,然后我们可以很容易地从masiv_Y1中删除元素,使用循环和使用erase/remove习语:

for ( size_t i = 0; i < masiv_X0.size(); ++i)
{
    for ( size_t j = 0; j < masiv_X0[i].size(); ++j)
    {
        auto& str = masiv_X0[i][j];
        for (size_t cur = 0; cur < masiv_Y1.size(); ++cur)
        {
            auto iter = std::remove(masiv_Y1[cur].begin(), masiv_Y1[cur].end(), str);
            masiv_Y1[cur].erase(iter, masiv_Y1[cur].end());
        }
    }
}

所以基本上,对于masiv_X0数组中的每个字符串,我们遍历masiv_Y数组的每一行,搜索并删除masiv_X0字符串。这是通过使用std::remove函数来完成的,然后使用vector::erase函数来清除数组中的元素。

下面是一个实例

注意我们在示例中也是如何输出最终结果的。使用size()成员函数代替硬编码行数和列数。