我一直在玩指针以更好地理解它们,我遇到了一些我认为我应该能够做到的事情,但却无法理清。下面的代码工作正常 - 我可以输出“a”,“dog”,“socks”和“裤子” - 但是如果我想从“袜子”输出'o'怎么办?我该怎么做?
char *mars[4] = { "a", "dog", "sock", "pants" };
for ( int counter = 0; counter < 4; counter++ )
{
cout << mars[ counter ];
}
如果问题在某处得到解答,请原谅我 - 有30多页与C ++指针相关的问题,我花了大约90分钟查看它们,以及阅读各种(内容丰富的)文章,然后才决定提问。
答案 0 :(得分:7)
mars[i][j]
将打印j
'字符串的i
个字符。
所以mars[2][1]
是'o'。
答案 1 :(得分:2)
如前所述,字符串是数组。实际上,这个概念是在std::string
- 类(顺便说一下,是表示C ++中的字符串的首选方式)上进行的,它实现了STL-Sequence的所有要求。此外,它实现了array-subscript运算符。这意味着表达式:
mars[i][j]
如果mars
被声明为,也会有效
std::vector< std::string > mars;
这是处理这个问题的C ++方法。我知道你这样做是为了学习指针,但我只是想我会添加这些来获取你的信息。此外,在学习C ++中的指针时,您还应该了解iterators,因为它们是generalizations of pointers。
答案 2 :(得分:1)
cout << mars[2][1] ;
mars
是char *
的数组,因此要获取您必须索引到char数组中的单个char
答案 3 :(得分:0)
mars[counter]
的类型为char *
,指向以零结尾的字符串。所以你可以:
for ( int counter = 0; counter < 4; counter++ )
{
char * str = mars[ counter ];
size_t len = strlen(str);
if (len >= 2)
cout << str[1];
}
答案 4 :(得分:0)
由于其他人提出了简单的方法,请找到一种圆形的方法;)
char *myChar = &mars[ 1 ][0];
int nPosOfCharToLocate = 1;
myChar = myChar + nPosOfCharToLocate;
cout <<*myChar<<endl;