vector, sir de caractere

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
david_stelian
Junior
Junior
Posts: 20
Joined: 13 Sep 2014, 22:35
Judet: Dolj

vector, sir de caractere

Post by david_stelian » 13 Sep 2014, 22:49

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[] ?



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: vector, sir de caractere

Post by Ovidiu Cucu » 15 Sep 2014, 11:12

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.

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: vector, sir de caractere

Post by bu7ch3r » 15 Sep 2014, 12:18

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).
Cu stima,
Lupu Claudiu

david_stelian
Junior
Junior
Posts: 20
Joined: 13 Sep 2014, 22:35
Judet: Dolj

Re: vector, sir de caractere

Post by david_stelian » 15 Sep 2014, 14:38

Mulțumesc pentru amabilitate domnilor!

Linet2014
Junior
Junior
Posts: 9
Joined: 05 Feb 2014, 20:35

Re: vector, sir de caractere

Post by Linet2014 » 11 Oct 2014, 16:38

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:

blackbee045
Junior
Junior
Posts: 1
Joined: 16 Oct 2014, 09:22
Judet: Arad

Re: vector, sir de caractere

Post by blackbee045 » 16 Oct 2014, 09:51

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 ?

Linet2014
Junior
Junior
Posts: 9
Joined: 05 Feb 2014, 20:35

Re: vector, sir de caractere

Post by Linet2014 » 16 Oct 2014, 14:58

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.

Linet2014
Junior
Junior
Posts: 9
Joined: 05 Feb 2014, 20:35

Re: vector, sir de caractere

Post by Linet2014 » 17 Oct 2014, 19:22

#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;
}
:?: :!:

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: vector, sir de caractere

Post by bu7ch3r » 24 Oct 2014, 18:20

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 :) )
Cu stima,
Lupu Claudiu

Post Reply