Puntatori c++

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Puntatori c++

    E cosi' ritorniamo al discorso di prima cioè se uso questo:
    
    std::string temp;
    cin >> temp;
    
    al quel punto perché fare tutto il procedimento che segue, cioè la stringa già l'ho letta. scusa della mia ignoranza in materia ma non riesco proprio a capire
  • Re: Puntatori c++

    Allora ci sono delle cose che a mio parere non ti sono chiare. una std::string non è un char *. una è una classe standard l'altro non è che un puntatore a dei caratteri. Se tu vuoi leggere il contenuto del cin in una stringa (cioè std::string) basta il cin, se invece sto contenuto lo vuoi piazzare in un char * ma non sai quanti caratteri devi allocare per contenere l'input allora prima lo metti in una std::string poi col'esempio di prima trasferisci il contenuto di una std::string in un char *.

    Non so come spiegartelo diversamente.
  • Re: Puntatori c++

    Ok però così ci si appoggia sempre all'uso delle stringhe, io intendevo senza l'uso delle stringhe cioè solo con un puntatore a char leggere una stringa, volevo sapere se era possibile
  • Re: Puntatori c++

    Se avessi letto ciò che ti ho scritto in precedenza non saremmo qui a ripetere all'infinito le stesse cose. Post nr 3 mio:
    Non puoi in maniera dinamica se non allocando uno spazio grande a sufficienza. Una cosa del tipo

    char * str = new char[1000];
    cin >> str;
    //uso str
    ....
    delete [] str;
  • Re: Puntatori c++

    A ecco scusami non ci avevo fatto caso, scusa ancora.
    Ultima cosa, allora la classe string come fa a funzionare? cioè come fa a sapere a priori quanti caratteri inserisco?
  • Re: Puntatori c++

    Così
    
    		// basic_string INSERTERS AND EXTRACTORS
    template<class _Elem,
    	class _Traits,
    	class _Alloc> inline
    	basic_istream<_Elem, _Traits>& operator>>(
    		basic_istream<_Elem, _Traits> && _Istr,
    		basic_string<_Elem, _Traits, _Alloc>& _Str)
    	{	// extract a string
    	typedef ctype<_Elem> _Ctype;
    	typedef basic_istream<_Elem, _Traits> _Myis;
    	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
    	typedef typename _Mystr::size_type _Mysizt;
    
    	ios_base::iostate _State = ios_base::goodbit;
    	bool _Changed = false;
    	const typename _Myis::sentry _Ok(_Istr);
    
    	if (_Ok)
    		{	// state okay, extract characters
    		const _Ctype& _Ctype_fac = _USE(_Istr.getloc(), _Ctype);
    		_Str.erase();
    
    		_TRY_IO_BEGIN
    		_Mysizt _Size = 0 < _Istr.width()
    			&& (_Mysizt)_Istr.width() < _Str.max_size()
    				? (_Mysizt)_Istr.width() : _Str.max_size();
    		typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();
    
    		for (; 0 < _Size; --_Size, _Meta = _Istr.rdbuf()->snextc())
    			if(_Traits::eq_int_type(_Traits::eof(), _Meta))
    				{	// end of file, quit
    				_State |= ios_base::eofbit;
    				break;
    				}
    			else if (_Ctype_fac.is(_Ctype::space,
    				_Traits::to_char_type(_Meta)))
    				break;	// whitespace, quit
    			else
    				{	// add character to string
    				_Str.append(1, _Traits::to_char_type(_Meta));
    				_Changed = true;
    				}
    		_CATCH_IO_(_Istr)
    		}
    
    	_Istr.width(0);
    	if (!_Changed)
    		_State |= ios_base::failbit;
    	_Istr.setstate(_State);
    	return (_Istr);
    	}
    
    
  • Re: Puntatori c++

    skynet ha scritto:


    così ... template<class _Elem, class _Traits, class _Alloc> inline ...
Devi accedere o registrarti per scrivere nel forum
21 risposte