Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,

 

προσπαθώ να διαβάζω από την γραμμή εντολών, μια είσοδο που δίνει ο χρήστης της μορφής για παράδειγμα:

 

def

abc

xyz

 

Δηλαδή να δίνει ένα string να πατάει ENTER και να δίνει όσα θέλει. Στην συνέχεια θα παίρνει ένα ένα αυτά τα strings και θα τα επεξεργάζεται με κάποιες συναρτήσεις(sort, reverse κτλ). Αυτό που ξεκίνησα να κάνω αρχικά είναι να διαβάζω την είσοδο μου στην σωστή μορφή.

Του λέω πως όταν δείς τον χαρακτήρα κενό τότε άλλαξε γραμμή.

 

>#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
char c;

char buffer[100];

cout<<"Give your input: "<<endl;

 c=read(buffer,100);
 for(int i=0;i<100;i++)
  {
   if(buffer[i]!=" ") //<------------------ ΕΔΩ ΜΟΥ ΒΓΑΖΕΙ ΠΩς ΔΕΝ ΓΙΝΕΤΑΙ Η ΣΥΓΚΡΙΣΗ
   {
    cout<<endl;
    cout.write(buffer[i]);
   }
   else
   cout.write(buffer[i]);
  }
  cout<<endl;
          
 system("pause");
 return 0;   
   
}

 

 

καμιά ιδέα τι μπορεί να φταίει?

 

Ευχαριστώ

Δημοσ.

Ωραία αυτό το κατάλαβα μετά πως ήταν λάθος με τα " " και το άλλαξα. Επίσης άλλαξα το πρόγραμμα ως εξής, χρησιμοποιώντας την getline

 

>#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{


char buffer[100];
char *p=buffer;
cout<<"Give your input: "<<endl;

 cin.getline(buffer,100);
 int i=0;
 for(int i=0;i<100;i++)
 {
  cout<<*(p+i);
if(*p != ' ')
	cout<<endl;
 }

system("pause");
return 0;   
  
   
}

 

όμως δυστυχώς πάλι δεν μπορώ να καταλάβω πως θα πάρω την έξοδο όπως θέλω δηλαδή στην μορφή

 

abc

chdhd

 

Ζητάει απ τον χρήστη να δώσει την είσοδο πχ αωσ ξαξαξα και σαν αποτέλεσμα πρέπει να πάρω

αωσ

ξαξαξα

 

:devil:

 

Μήπως μπορεί να γίνει ευκολότερα χρησιμοποιώντας δισδιάστατο array ? η κάποια άλλη συνάρτηση πέρα απο την getline?

Δημοσ.

1.Υπάρχει λόγος οου τον buffer σε δεύτερο δείκτη?

2.Η for πρέπει να πάει το strlen(p) οχι μέχρι το 100.

3.Αν θες σε κάθε λέξη να αλλάζει γραμμή βάλε αυτο *(p+i)==' ' στην if.

4 Δήλωσε το i μια φορα

Δημοσ. (επεξεργασμένο)

...

Μήπως μπορεί να γίνει ευκολότερα χρησιμοποιώντας δισδιάστατο array ? η κάποια άλλη συνάρτηση πέρα απο την getline?

Yeap , θα σε βοηθήσει επίσης μετά να εφαρμόσεις τις συναρτήσεις που θέλεις σε κάθε (διαβασμένο) string ξεχωριστά. Οπότε το buffer σου αντί να είναι πίνακας χαρακτήρων κάνε το να είναι πίνακας από strings (το καθένα από τα οποία θα τα διαβάζεις με την getline() ;) ).

Επεξ/σία από migf1
Δημοσ.

Μια λυση ειναι η χρηση iterators

πχ

>#include <iostream>
#include <algorithm>
#include <string>
#include <iterator>



int main()
{
std::cout << "Dwse tanga kai pata Ctrl + Z gia telos\n";

std::istream_iterator<char> first(std::cin >> std::noskipws);
std::istream_iterator<char> end; // EOF ctrl + z 

std::string buffer(first,end);

std::cout << "Edwses:\n";
std::cout<<buffer;


return 0;
}

 

 

output

>Dwse tanga kai pata Ctrl + Z gia telos
Ena dyo tria
piga sth kyria
hey hop
^Z
Edwses:
Ena dyo tria
piga sth kyria
hey hop

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...