用大小可变的元素实现字符串数组

时间:2019-02-25 09:00:49

标签: c++ string

如何实现具有不同大小的字符串数组,即数组stringar[4]={"black","red","blue","green"}。 另外,如何在C ++中访问每个元素的单个字母/字符? 编辑: 这就是我在CPP中尝试过的方法。但是它为所有输入提供了相同的输出(即0)。 代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{   int n,i,j,p,q,f=0,count=0,key,m;
    char s[100][100];
    cin>>n;
    for( i = 0; i < n; i++)
      for (j = 0; j < 100; j++)
        cin >> s[i][j];
      for(i=0;i<n;i++)
        {
            for (j = 0; j < 100; j++) 
            {
                key = s[i][j];
                for (p = i + 1; p < n; p++) 
                {
                    for (q = 0; q < m; q++) 
                    {
                        if (key == s[p][q]) {f = 1;break;}
                        else {f = 0;continue;}
                    }
                }
                if (f == 1)
                    count++;
            }
        }
    cout<<count;        
    return 0;
}

3 个答案:

答案 0 :(得分:2)

最后,您需要将其想象为大小可变的 Matrix

[b][l][a][c][k]

[r][e][d]

[b][l][u][e]

[g][r][e][n]

 std::vector<std::string> stringar;
    stringar.push_back( "black" );
    stringar.push_back( "red" );

    char letter = stringar[ 0 ][ 1 ]; 
    char letter2 = stringar[ 1 ][ 2 ];

letter将在位置0的矩阵中的数组的位置1具有字母:

数组在位置0:black中。位置1的字母:l

数组在位置1:red中。位置2:d

中的字母

[b][l][a][c][k]

[r][e][d]

编辑:

正如您在评论中问我的那样,这是一个粗略的实现,因此您可以看到它是如何完成的! (请原谅我的printf而不是cout,但我无法使用它。

int rows = 4; //black, red, blue, green ==> 4 elements
    int cols[4] = { 5, 3, 4, 5 }; // 5 letters for black, 3 letters for red, etc.
    int** matrix = new int*[rows];
    for (int i = 0; i < rows; ++i)
        matrix[i] = new int[cols[i]];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols[i];j++) {
            matrix[i][j] = 0;
            printf("%d", matrix[i][j]);
        }
        printf("\n");
    }

这将显示此输出,这就是您要寻找的(而不是0 s,无论您需要什么矿物质)。

00000 (black) 000 (red) 0000 (blue) 00000 (green)

The output:

答案 1 :(得分:1)

尝试一下:

std::vector<std::string> VectorOfStrings;
VectorOfStrings.push_back( "blue" );
VectorOfStrings.push_back( "red" );

char letter = VectorOfStrings[ 1 ][ 0 ]; // access 'r'

答案 2 :(得分:1)

您可以通过多种方式访问​​字符串和单个字符。这是三个示例:

#include <iostream>
#include <vector>

int main() {
    // dynamic array-like collection of strings:
    std::vector<std::string> stringar = {"black","red","blue","green"};

    // access using index
    for(size_t vidx = 0; vidx<stringar.size(); ++vidx) {
        std::cout << "Accessing the contents of " << stringar[vidx] << "\n";
        for(size_t sidx = 0; sidx<stringar[vidx].size(); ++sidx) {
            std::cout << " " << stringar[vidx][sidx] << "\n";
        }
    }

    // access using iterators
    for(std::vector<std::string>::iterator vit = stringar.begin(); vit!=stringar.end(); ++vit) {
        std::cout << "Accessing the contents of " << *vit << "\n";
        for(std::string::iterator sit = (*vit).begin(); sit!=(*vit).end(); ++sit) {
            std::cout << " " << *sit << "\n";
        }
    }

    // access using range based for loop
    for(const auto& str : stringar) {
        std::cout << "Accessing the contents of " << str << "\n";
        for(auto ch : str) {
            std::cout << " " << ch << "\n";
        }
    }
}