[Semplice]String To Array

Stato
Discussione chiusa ad ulteriori risposte.

PowerOfMind

Utente Silver
24 Marzo 2010
7
1
0
54
oggi leggendo il mio libro di informatica ho trovato questo semplicissimo esercizio eccolo:
Imitare il metodo Split() senza usare funzioni build-in
che tradotto significa di creare una funzione capace data una stringa e un separatore di dividere la stringa data in un array di elementi
ossia: [/quote]
Codice:
cane cavallo casa Banana
in questo dato il separatore "c":
Codice:
ane 
avallo
asa
Banana


ecco il mio in ruby:
Codice:
def arraizza(str, like)
	swap = []
	buff = ""
	str.length.times {|x|
		if str[x].chr == like
			swap << buff and buff = ""
		else
			buff += str[x].chr
		end
	}
	swap << buff
	return swap
end
 
PowerOfMind ha detto:
Codice:
cane cavallo casa Banana
in questo dato il separatore "c":
Codice:
ane 
avallo
asa
Banana

Però, il risultato corretto dovrebbe essere:
Codice:
ane
avallo
asa Banana
 
C++
Codice:
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
using namespace std;

vector<string> str_split( const string &str, const string &delimiter=" " );

int main( void )
{
   string x="cane cavallo casa Banana";
   vector<string> v_x;
   
   v_x = str_split( x, "c" );
   copy( v_x.begin(), v_x.end(), ostream_iterator< string >( cout, "\n" ) );
   return 0;
}

vector<string> str_split( const string &str, const string delimiter )
{
   vector<string> result;
   int pos;
   int prev;
   
   pos = 0;
   prev = 0;
   
   while(( pos = str.find( delimiter, pos ) ) != string::npos )
   {
      
      result.push_back( str.substr( prev, pos-prev ) );
      pos += delimiter.length();
      prev = pos;
   }
   
   result.push_back( str.substr( prev ) );
   
   return result;
}
 
TheZek ha detto:
PowerOfMind ha detto:
Codice:
cane cavallo casa Banana
in questo dato il separatore "c":
Codice:
ane 
avallo
asa
Banana

Però, il risultato corretto dovrebbe essere:
Codice:
ane
avallo
asa Banana
sisisi scusa sbagliato xk al inizio avevo intenzione di mettere come separatore \n ma poi ho cambiato idea XD
 
Codice:
def split(str,sep)
    i=-1 and a=[]
    while i=(sep+str).index(sep,i+1) do a.push (sep+str)[(i+1)...(sep+str+sep).index(sep,i+1)] end
    a
end

comunque regaz il vostro risultato è sbagliato.

essendoci un separatore all'inizio (cane) il risultato giusto dev'essere:
Codice:
["", "ane ", "avallo ", "asa Banana"]
compreso di stringa vuota! e anche se ci sono due separatori attaccati deve dare anche una stringa vuota!
 
GreyFox ha detto:
Codice:
def split(str,sep)
    i=-1 and a=[]
    while i=(sep+str).index(sep,i+1) do a.push (sep+str)[(i+1)...(sep+str+sep).index(sep,i+1)] end
    a
end

comunque regaz il vostro risultato è sbagliato.

essendoci un separatore all'inizio (cane) il risultato giusto dev'essere:
Codice:
["", "ane ", "avallo ", "asa Banana"]
compreso di stringa vuota! e anche se ci sono due separatori attaccati deve dare anche una stringa vuota!
già :pattmg: ( il mio cmq è giusto xD )
 
GreyFox ha detto:
comunque regaz il vostro risultato è sbagliato.

essendoci un separatore all'inizio (cane) il risultato giusto dev'essere:
Codice:
["", "ane ", "avallo ", "asa Banana"]
compreso di stringa vuota! e anche se ci sono due separatori attaccati deve dare anche una stringa vuota!

ÈVVEROCAZZO (colpa di chi ha creato il topic xD)
http://sprunge.us/LPif?pl
 
in Java:
Codice:
public void Split(String st,String separatore){
       String sub_st="";
       for(int i=1;i<st.length();i++){
           String ctr=""+st.charAt(i);
          if(ctr.equals(separatore)) sub_st+="\n";
          else sub_st+=ctr;
       }System.out.println(sub_st);
    }
 
Razorblabla ha detto:
Codice:
public void Split(String st,String separatore){
       String sub_st="";
       for(int i=1;i<st.length();i++){
           String ctr=""+st.charAt(i);
          if(ctr.equals(separatore)) sub_st+="\n";
          else sub_st+=ctr;
       }System.out.println(sub_st);
    }
Ma non doveva essere un array?
 
ehm si,non avevo letto che doveva ritornare l'array...avevo visto solo le tre stringhe nella prova:
Codice:
public Object[] Split(String st,String separatore){
       java.util.ArrayList array=new java.util.ArrayList();
       String sub_st="";
       for(int i=1;i<st.length();i++){
           String ctr=""+st.charAt(i);
          if(ctr.equals(separatore)){
              array.add(sub_st);
              sub_st="";
          }else sub_st+=ctr;
       }array.add(sub_st);
       return array.toArray();
    }
 
Stato
Discussione chiusa ad ulteriori risposte.