Informatică, întrebare adresată de paulb007, 8 ani în urmă


int main()
{ char *p, s[10]="anadamace";
p=strstr(s,"ma")-s;
cout << p;


imi da eroare acolo la p=.... ca dc e int si char, ce ar trebui sa dea daca ar merge? si cum as putea remedia eroarea?


AfloareiAndrei: aratane si functia 'strstr(char, char)', daca poti pune tot codul
paulb007: # include < iostream >
# include < cstring >
# include < string >
using namespace std;

int main()
{ char *p, s[10]="anadamace";
p=strstr(s,"ma")-s; // la randul acesta scrie: invalid conversion from int to char* -fpermessive //
cout << p;

return 0;
}

Răspunsuri la întrebare

Răspuns de robertanisoiu
0

Răspuns:

Explicație:

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

   char s[]="anadamace";

   char *p = strstr(s,"ma");

   cout<<p<<endl; //afiseaza 'mace'

   cout<<p-s+1; //afiseaza 6, pozitia unde incepe 'ma'

   return 0;

}


paulb007: frate nu inteleg ce face p-s+1, explica 'babeste' aia nu inteleg ce face din tot programu, cum ai ajuns la pozitia 6?
AfloareiAndrei: Functia strstr() iti returneaza un pointer pentru prima aparitie a sirului "ma" in s.
AfloareiAndrei: p = strstr(s, "ma") => p = mace
AfloareiAndrei: acum trebuie sa scazi din sirul "anadamace" sirul "mace"
AfloareiAndrei: asta face strstr(s, "ma") - s dar iti da eroare. si p - s + 1 este o alternativa
AfloareiAndrei: incearca sa faci definesti pointerul p ca si constanta
AfloareiAndrei: poate o sa mearga cu codul original.
Răspuns de boiustef
0

Răspuns:

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

   char *p, s[10]="anadamace";

   p=strstr(s,"ma");

   if (p) cout << (p-s);

   else cout << -1;

   return 0;

}

Explicație:


paulb007: multumesc pt ca ma ajuti, dar spune-mi ce inseamna operatia 'p-s' ce face efectiv ca asta nu pot pricepe???
boiustef: e o diferenta de adrese a adreseisubsirului si sirului initial
boiustef: p este adresa unde incepe subsirul, iar s pastreaza adresa unde incepe sirul de caractere
Alte întrebări interesante