Как вывести отдельный символ при использовании char * [] = "что-то" - PullRequest
3 голосов
/ 29 апреля 2010

Я играл с указателями, чтобы лучше понять их, и я наткнулся на то, что, как мне кажется, я должен был бы сделать, но не могу разобраться, как. Приведенный ниже код работает нормально - я могу вывести «a», «собака», «носки» и «штаны» - но что, если я хочу просто вывести «o» из «носков»? Как бы я это сделал?

char *mars[4] = { "a", "dog", "sock", "pants" };

for ( int counter = 0; counter < 4; counter++ )
{
  cout << mars[ counter ];
}

Пожалуйста, прости меня, если где-нибудь ответили на вопрос - есть более 30 страниц вопроса, связанного с указателем C ++, и я потратил около 90 минут на их просмотр, а также на чтение различных (очень информативных) статей, прежде чем принять решение задать вопрос.

Ответы [ 5 ]

7 голосов
/ 29 апреля 2010

mars[i][j] напечатает j '-й символ i' -ой строки.

Итак, mars[2][1] - это 'o'.

2 голосов
/ 29 апреля 2010

Как указывалось ранее, строки - это массивы.Фактически, эта концепция реализована в классе std::string (который, кстати, является предпочтительным способом представления строк в C ++), который реализует все требования STL-sequence .Кроме того, он реализует оператор массива-индекса.Это означает, что выражение:

mars[i][j]

также будет работать, если бы mars было объявлено как

std::vector< std::string > mars;

, что гораздо больше подходит для C ++.Я понимаю, что вы делаете это, чтобы узнать об указателях, но я просто решил добавить это для вашей информации.Кроме того, изучая указатели в C ++, вы также должны узнать об итераторах , поскольку они являются обобщениями указателей .

1 голос
/ 29 апреля 2010
cout << mars[2][1] ;

mars - это массив char *, поэтому для получения отдельного символа необходимо индексировать его в массив char

0 голосов
/ 29 апреля 2010

Так как другие предложили простой способ, пожалуйста, также найдите один обходной путь;)

char *myChar = &mars[ 1 ][0];
int nPosOfCharToLocate = 1;
myChar = myChar + nPosOfCharToLocate;
cout <<*myChar<<endl;
0 голосов
/ 29 апреля 2010

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]; 
} 
...