сравнить символ в массиве символов с помощью strcmp

Я хотел бы использовать strcmp для поиска определенного символа в массиве символов. Например, я хотел бы определить номер индекса, где . находится в тексте.

char host[100] = "hello.world";
size_t i=0;
for(i=0;i<strlen(host);i++){
   if(strcmp(host[strlen(host)-i], ".")){
        printf("%d\n",i);
   }
}

однако он выводит "passing argument 1 of 'strcmp' makes pointer from integer without a cast ". Я заметил, что массив char является целым, но я не мог понять, как я должен был передать индекс char. Не могли бы вы рассказать мне, как я должен был использовать эту функцию?


person Johan Elmander    schedule 14.07.2013    source источник
comment
Почему вы хотите использовать strcmp для этой задачи? это должно быть проще   -  person typ1232    schedule 14.07.2013
comment
Вместо этого используйте strchr или strcspn.   -  person BLUEPIXY    schedule 14.07.2013
comment
не знала о такой функции, спасибо   -  person Johan Elmander    schedule 14.07.2013


Ответы (2)


Эта строка:

if(strcmp(host[strlen(host)-i], ".")){

должно выглядеть так (добавлен амперсанд для передачи указателя на элемент массива char):

if(strcmp(&host[strlen(host)-i], ".")){

Однако верно, как уже отмечали другие, что strcmp не лучший инструмент для этой задачи. Вы можете использовать strchr или просто сравнить символы с оператором '==', если вы предпочитаете создавать свой собственный цикл.

person piokuc    schedule 14.07.2013

Поскольку кажется, что вы хотите отсканировать строку назад, вы можете сделать:

char host[100] = "hello.world";
size_t ii=0;

for(ii=strlen(host); ii--;){
   if(host[ii] ==  '.') { // compare characters, not strings
        printf("%zu\n", ii);
   }
}

У этого есть дополнительное преимущество вызова strlen() только один раз (исходный код вызывал его N*(N-1) раза)

person wildplasser    schedule 14.07.2013