Je suis vraiment nouveau à C.strpos en C- comment ça marche
Je veux utiliser la fonction strpos mais il me dit qu'il n'existe pas?
Je suis vraiment nouveau à C.strpos en C- comment ça marche
Je veux utiliser la fonction strpos mais il me dit qu'il n'existe pas?
La fonction que vous recherchez peut-être soit strstr ou strchr. Vous devez ensuite inclure string.h. Il n'y a pas de strpos dans l'interface POSIX.
Oui. Il est appelé strstr
, lié à strpos
comme (pseudo-code):
strpos(str, target) {
res = strstr(str, target);
if (res == NULL) return false;
else return res - str;
}
Probablement devrait être return -1; au lieu de retourner faux; pour des résultats valides de 0 à strlen (str) -strlen (cible) ... strpos n'est pas inclus dans la norme, afaik, parce que le test NULL et soustrait généralement le plus efficace inline donc il a été jugé superflu. –
Voici un code d'extrait complet pour résoudre votre problème. PS: Il n'est pas trop tard pour vous aider. ;)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NOT_FOUND -1
int main(){
int pos = NOT_FOUND;
if ((pos = strpos("subsstring", "string")) != NOT_FOUND)
printf("found at %d\n", pos);
else
printf("not found!\n");
return 0;
}
int strpos(char *haystack, char *needle)
{
char *p = strstr(haystack, needle);
if (p)
return p - haystack;
return NOT_FOUND;
}
Modifier: Répondre à Can Vural question:
Non, je pense vraiment que ce serait comme ça. Au paradigme de programmation structurée, il est courant d'utiliser la structure de périmètre en tant que premier paramètre sur chaque fonction appartenant à la portée de la structure elle-même. La fonction strstr définie sur string.h suit la même approche. Pendant la POO, vous avez haystack.indexOf(needle)
. À la programmation structurée, vous avez indexOf(haystack, needle)
.
Ne devrait-il pas être 'strpos (" chaîne "," sous-chaîne ")' –
Can Vural, j'ai édité ma réponse en incluant quelques explications supplémentaires à propos de votre question. – Miere
J'ai écrit la fonction strpos() à partir de rien avec la fonction position (comme la fonction strpos() de PHP). La valeur de retour sera la position de départ de la chaîne recherchée. Prendre plaisir! :) Dans cet exemple, la sortie de code
seront 12
#include <stdio.h>
#include <string.h>
int strpos(char *haystack, char *needle, int pos);
int main(){
printf("%d",strpos("abcdefabcdefabcdef asdfgavcabcddd","abc",10));
return 0;
}
int strpos(char *haystack, char *needle, int pos){
int i,j,check,result = -1;
int len_needle=strlen(needle);
int len_haystack=strlen(haystack);
i = pos;
if (len_needle>len_haystack || *needle==NULL || i>(len_haystack-1)) return result;
for(;i<len_haystack;i++){
check = 0;
for(j=0;j<len_needle;j++){
if(haystack[i+j]==needle[j]){
check++;
}
}
if(check==len_needle){
result = i;
break;
}
}
return result;
}
Ceci est en réponse à Miere et Can Vural. Je ne peux pas encore ajouter de commentaires, donc je vais ajouter ceci comme réponse.
devrait-il pas être strpos ("string", "sous-chaîne") - Peut Vural
à la programmation structurée, vous avez indexOf (botte de foin, aiguille). Miere
Dans votre code, vous avez:
int strpos(char *haystack, char *needle)
mais vous aussi:
(pos = strpos("subsstring", "string"))
Je suis entièrement d'accord avec les « int strpos (char * botte de foin, aiguille char *) "où la chaîne à rechercher vient en premier et la chaîne à rechercher est la deuxième. Mais pour moi, "subsstring" (dans le contexte de "on est une sous-chaîne et on est une chaîne"), "subsstring" implique que IT est le plus court des deux et que vous essayez de trouver "substring" dans " chaîne."
Ainsi, d'une part:
(pos = strpos("subsstring", "string"))
devrait être:
(pos = strpos("string" /*that which is being searched within/*, "substring" /*that which is being searched for in the previous parameter*/))
qui serait le même que:
(pos = strpos("haystack", "needle"))
Que faut-il faire' strpos' Quels sont les les types et les nombres de ses paramètres, et quelle est la valeur de retour? Puisque le standard C ne définit pas 'strpos()', et POSIX non plus, vous devriez le faire. 'strpos' est réservé en C, donc idéalement, vous voudriez appeler votre fonction autrement,' posstr' par exemple. –
@Alok Pouvez-vous donner une source pour 'strpos' étant réservé en C? –