如何实现具有不同大小的字符串数组,即数组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;
}
答案 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)
答案 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";
}
}
}