Comportamento anomalo stringstream

di il
1 risposte

Comportamento anomalo stringstream

Ciao ragazzi!!
sto studiando il c++, vorrei capire questo comportamento anomalo a cosa è dovuto:

dato questo codice:

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <ctype.h>


//se la stringa è un intero ritorna un intero altrimenti un carattere.

using namespace std;

int * ricevistringa(char * numerointero)
{	
	int static contatore = 0;
	string static numeriinseriti[500];
	//string static numeroint = "";
	if (*numerointero == '0')
	{
		string static prova;
		for (int x = 0; x < contatore; x++)
		{
			prova += numeriinseriti[x];
		}
		string s = prova;
		stringstream ss(s);
		int static i;
		ss >> i;
		return &i;
	}
	//numeroint += *numerointero;
	numeriinseriti[contatore] = *numerointero;
	contatore += 1;

}

string analizzastringa()
{
	string str;
	cout << "inserisci stringa che vuoi analizzare.. : ";
	cin >> str;
	
	int dimensionestringa = str.size();
	cout << str.size() << " questa e' la dimensione della stringa" << endl; //questa è la dimensione della stringa numero di caratteri che la compongono.
	cout << str[0] << " questo e' il primo carattere della stringa\n" << endl; //stampa il primo carattere della stringa.
	//cout << strlen(str.c_str()) << endl;

	for (int x = 0; x < dimensionestringa; x++)
		if (isdigit(str[x]) == true) //se x carattere della stringa è un numero..

		{
			
			ricevistringa(&str[x]);
			cout << "il carattere " << x << " e' un numero" << endl;
			
		}

		else
		{
			cout << "il carattere " << x << " non e'  un numero" << endl;
		}

}


int main()
{
	analizzastringa();
	char a = '0';
	int * ab;
	ab = ricevistringa(&a);
	cout << *ab << endl;
	system("PAUSE");
	return 0;
}


//se il carattere è un intero ritorna la stringa poi nella funzione lo trasformi, altrimenti ritorna il carattere in un altra funzione.

il codice funziona ma ha un comportamento strano.
se lanci l'eseguibile, e digiti un po' di numeri (8 cifra MAX) ritorna il valore corretto.
se invece digiti una cifra molto grossa, tipo 10 cifre, ritorna sempre e solo il solito valore: 2147483647

ora la mia domanda è: cos'è quel valore? a cosa è dovuto?
Allegati:
24725_c7fb26c316991aefb153961bed0fa82a.jpg
24725_c7fb26c316991aefb153961bed0fa82a.jpg

1 Risposte

  • Re: Comportamento anomalo stringstream

    Scusate mi rispondo da solo, si imparano sempre cose nuove.. google insegna!!


    2 147 483 647 è il valore massimo che può assumere un numero intero (con segno) a 32 bit.[8] La sua presenza è legata ad una condizione di overflow.
    Nel dicembre 2014 Google ha scherzosamente annunciato che YouTube ha dovuto modificare il contatore delle visualizzazioni, prima implementato come intero a 32 bit, poiché il video di Gangnam Style aveva superato i 2 miliardi di visite

    fonte: wikipedia
Devi accedere o registrarti per scrivere nel forum
1 risposte