Подсчитать количество символов в массиве символов, включая пробелы, до нулевого символа - PullRequest
0 голосов
/ 23 сентября 2010

Я пытаюсь подсчитать количество символов в массиве символов, включая пробел до конца строки.

Следующие компиляции, но не возвращают правильное значение, я пытаюсь использовать арифметику указателей для перемещения по моему массиву.

   int numberOfCharsInArray(char* array) {
       int numberOfChars = 0;
       while (array++ != '\0') {
           numberOfChars++;
       }
       return numberOfChars;
   }

Большое спасибо.

Очевидно, я пытаюсь получить эквивалент length () из cstring, но использую простой массив символов.

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

Ответы [ 4 ]

7 голосов
/ 23 сентября 2010

Чтобы получить доступ к указателю на символ по указателю, вам нужно разыменовать указатель.В настоящее время вы сравниваете array (адрес) с '\0'

. Вы можете исправить свой код следующим образом:

int numberOfCharsInArray(char* array){
 int numberOfChars = 0;
   while (*array++){
       numberOfChars++;
   }
   return numberOfChars;
}

Функция имитации cstring strlen not length.

РЕДАКТИРОВАТЬ:

Чтобы узнать, как работает условие во время, вы можете увидеть эту тему .

4 голосов
/ 23 сентября 2010

Возможно, я что-то упускаю, но почему бы просто:

int numberOfCharsInArray(char* array) {
  return strlen(array);
}  

... или даже:

int numberOfCharsInArray(char* array) {
  return std::string(array).length();
}
2 голосов
/ 23 сентября 2010

Когда вы пишете array++ != '\0', вы проверяете, является ли адрес памяти array '\ 0'.Попробуйте вместо этого:

int numberOfCharsInArray(char* array){
int numberOfChars = 0;
while (*array != '\0'){
   numberOfChars++; array++;
   }
return numberOfChars;
}

Редактировать: Упс, кодаддикт был быстрее, а его код более элегантным.

0 голосов
/ 23 сентября 2010
static const size_t maxExpectedChars = 4 * 1024; // Max chars expected, e.g. 4K    
size_t numberOfCharsInArray( char * array) {
    if( !array ) { return 0; }         // A non-existing string has `0` length
    size_t charsSoFar = 0;
    while ( *array ) {
        charsSoFar += 1;
        if( charsSoFar == maxExpectedChars ) { break; }  // Stop runaway loop
        ++array;
    }
    return charsSoFar;
} 
...