Page 1 of 1

vector, sir de caractere

Posted: 13 Sep 2014, 22:49
by david_stelian
Va salut !
Inainte de a va relata ce am pe suflet vreau sa va spun ca sunt nou pe forum
si vreau sa va multumesc anticipat ca va bateti capul cu noi incepatorii.
Mai jos am realizat doua coduri diferite.

Code: Select all

#include <iostream>
using namespace std;

int main()
{
    int tab[] = {10, 11, 12, 13};
    int *p;
    p = &tab[0];
    cout << endl;
    cout << " " << p;
    cout << endl;
    return 0;
}

Code: Select all

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char arr[] = "Totul despre C si C++";
    char *q;
    q = &arr[0];
    cout << endl;
    cout << " " << q;
    cout << endl;
    return 0;
}

La ambele coduri folosesc initializarea pointerilor cu adresa primului element al tabloului respectiv al sirului de caractere.
La primul cod linia cout << " " << p afiseaza adresa primului element adica adresa lui tab[0].
La al doilea cod linia cout << " " << q afiseaza intregul sir.

Avem doua linii de cod identice ca sintaxa, sigur diferite la initializare si ca tip de date (p este pointer catre intreg, q este pointer catre caracter)
De linia de cod cout << " " << q afiseaza intregul sir ?
De ce nu este afisata adresa primului element, adica adresa lui T, asa cum linia de cod cout << " " << p afiseaza adresa lui 10 care este si adresa vectorului tab[] ?

Re: vector, sir de caractere

Posted: 15 Sep 2014, 11:12
by Ovidiu Cucu
std::cout este un obiect global definit in biblioteca C++ standard (STL) si este de tipul std::ostream.
Pentru std::ostream sunt definiti mai multi operatori << supraincarcati, atat ca functii membre in std::ostream cat si ca functii globale.
Intreaga lista o poti gasi aici: In functie de tipul care il pasezi in dreapta lui <<, se apeleaza unul sau altul dintre acesti operatori supraincarcati.
Daca tipul este char* se va apela ostream& operator<< (ostream&, const char*) care afiseaza un sir de caractere.
In celalalt caz pe care l-ai prezentat, se apeleaza ostream& ostream::operator<< (void*) care afiseaza adresa continuta in acel pointer.

Re: vector, sir de caractere

Posted: 15 Sep 2014, 12:18
by bu7ch3r
In cazul tau e vorba de supraincarcare - supraincarcarea nu se face doar pe operatori ci si pe metode/functii(pentru informatia ta).

Un exemplu concret despre ce se intampla cu codul tau e aici:
http://www.cprogramming.com/tutorial/op ... ading.html

nota:
STL vine de la Standard Template Library - template-ul e o chestie misto in c++ - pe langa treaba asta cu template-uri, STL-ul ofera multe multe multe alte lucruri pe care sper sa le descopere toata lumea(...interesata).

Re: vector, sir de caractere

Posted: 15 Sep 2014, 14:38
by david_stelian
Mulțumesc pentru amabilitate domnilor!

Re: vector, sir de caractere

Posted: 11 Oct 2014, 16:38
by Linet2014
Se citesc doua siruri de caractere, se cere sa se transforme prima jumatate a primului sir in litere mari si a doua jumatate a celui de-al doilea in litere mici. sirurile contin litere mari si mici si spatii. :beg:

Re: vector, sir de caractere

Posted: 16 Oct 2014, 09:51
by blackbee045
Avem doua linii de cod identice ca sintaxa, sigur diferite la initializare si ca tip de date (p este pointer catre intreg, q este pointer catre caracter)
De linia de cod cout << " " << q afiseaza intregul sir ?

Re: vector, sir de caractere

Posted: 16 Oct 2014, 14:58
by Linet2014
Linet2014 wrote:Se citesc doua siruri de caractere, se cere sa se transforme prima jumatate a primului sir in litere mari si a doua jumatate a celui de-al doilea in litere mici. sirurile contin litere mari si mici si spatii. :beg:
Nu poate nimeni sa imi ofere o sugestie macar. Indiferent cum prelucrez la afisare am doar prima parte din sir.
Multumesc.

Re: vector, sir de caractere

Posted: 17 Oct 2014, 19:22
by Linet2014
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[100], p[100];
int i,n,m;
cout<<"Sirul: "; cin.get(s,99); n=strlen(s)/2; m=strlen(s);
for (i=n; i<m; i++){
if(s!=' ')
strcpy(p,s);
cout<<p<<' ';}
cout<<endl;
for(i=0;i<n;i++){
strlwr(s);
cout<<s<<' '; }
cout<<endl;
strcat(s,p);
cout<<s<<' ';
cout<<endl;
for(i=0;i<m;i++)
if(s!=' ')
cout<<s<<' ';
return 0;
}
:?: :!:

Re: vector, sir de caractere

Posted: 24 Oct 2014, 18:20
by bu7ch3r
cam complicat:

Code: Select all

{
char a[100];
cin.get(a.99);

int nsize = strlen(a);
int nhalfsize = nsize/2;

for(int i=n; i < nhalfsize; i++)
{
    if(a[i] >= 'a' && a[i] <='z')
    a[i] = a[i] - 32; //asta e diferenta intre uppercase si lower case
}
for(int i = nhalfsize; i < size; i ++)
{
    if(a[i] >= 'A' && a[i]<= 'Z')
    a[i] = a[i] + 32;
}

cout << a;

}

Uite-te mereu pe tabelul ascii cand ai de facut manevre de astea: [link] http://www.asciitable.com/ [/link]

Sper ca nu vrei ca programul tau sa suporte unicode nu ? (de exemplu sa suporte un string in bulgara :) )