Pws tha eferesw ta kena apo ena String ???

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Peek-a-Boo
Δημοσιεύσεις: 14
Εγγραφή: 16 Νοέμ 2010 12:01
Τοποθεσία: gr

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από Peek-a-Boo » 15 Δεκ 2010 21:20

#include <cstdlib>
#include <iostream>

using namespace std;


int func(int i,char protasi[80]){
string str = protasi;
char remove = i;
for(string::iterator it = str.begin(); it!=str.end(); ){
if( (*it) == remove )
it = str.erase( it );
else
it++;
}
cout << str << endl;
}


int main(int argc, char *argv[])
{
int i, n, z;
char protasi[80];
printf("\nDose mia protasi ");
gets(protasi);
printf("\nH protasi einai "" %s\n"" ",protasi);
printf("\nDose to gramma pou thes na aferethei ");
scanf("%c",&i);
z=func(i,protasi);

system("PAUSE");
return EXIT_SUCCESS;
}


Lipon ayto pou prepei na prosthesw wste na teleiwsei h askhs einai oti: Otan kapoios sthn protasi pou tha dwsei afhsei KENO >1 (panw apo ena keno, etsi leei h askhsh) na svhnei ta extra kena kai na menei mono 1.
Me ligo psaksimo sto google vrika pws na svinw ena sygkekrimeno gramma kai me vasei ayto prospathisa na kanw ayto me ta kena alla matea :P:P
Osoi pisth proselthete na voithisete :D

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από _tasos » 15 Δεκ 2010 22:20

Μπορείς να χρησιμοποιήσεις αναδρομή για να το πετύχεις. Βάλε ένα int flag στη func() και το αρχικοποιείς στο 0. Αν κάνεις erase τότε θα το κάνεις 1.

Στο τέλος της func() θα κάνεις έναν έλεγχο. Αν το flag είναι 1 τότε καλείς ξανά την func() με το str σαν παράμετρος. Αλλιώς τυπώνεις με cout το αποτέλεσμα.

Πρακτικά, όσο υπάρχουν κενά στο str θα τρέχει η συνάρτηση και θα το καθαρίζει. Όταν δεν έχει απλά θα τυπώνει το τελικό αποτέλεσμα.

Ένας άλλος τρόπος να το προσεγγίσεις το πρόβλημα αυτό είναι να παίξεις με regular expressions.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από gvre » 15 Δεκ 2010 23:52

Το πρόγραμμα που θέλεις να φτιάξεις είναι σε C ή C++;

Κώδικας: Επιλογή όλων

int func&#40;int i,char protasi&#91;80&#93;&#41; &#123; 
	string str = protasi;
1. Ψάξε στο Google για τον τρόπο με τον οποίο μπορείς να περάσεις ως όρισμα ένα πίνακα χαρακτήρων σε μια συνάρτηση. Μόλις το διαβάσεις, αγνόησέ το και διάβασε πως μπορείς να περάσεις reference ενός string.
2. Μη χρησιμοποιείς το όνομα i, j, k για οτιδήποτε άλλο εκτός από μετρητή.
3. Η συνάρτησή σου δεν έχει protype, λες ότι επιστρέφει int αλλά δεν κάνεις πουθενά return και έχει όνομα func το οποίο δε λέει και πολλά.
4. Το str είναι τοπική μεταβλητή.
5. Βάζε τον κώδικα σε Code blocks.

Κώδικας: Επιλογή όλων

cout << str << endl;
Η συνάρτηση λογικά θα πρέπει απλά να αφαιρεί τους χαρακτήρες. Το cout θα πρέπει να γίνεται στη main.


Σχετικά με τη διαγραφή:
Δηλώνεις μια μεταβλητή πχ bool isPreviousCharSpace = false;
Διαβάζεις το string ένα ένα χαρακτήρα.
Όταν συναντήσεις το 1ο κενό αλλάζεις την τιμή της παραπάνω μεταβλητής σε true και το αγνοείς.
Αν ο επόμενος χαρακτήρας είναι κενό, ελέγχεις τι ήταν ο προηγούμενος χαρακτήρας. Αν ήταν κενό, θα διαγράψεις αυτόν στον οποίο δείχνει ο iterator σου.
Αν δεν είναι κενό, θέτεις το isPreviousCharSpace = false;
Όπου δεν κάνεις erase, πρέπει να κάνεις it++.

Αν ακολουθήσεις τα παραπάνω λογικά θα λύσεις την άσκηση.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από virxen75 » 16 Δεκ 2010 01:01

σε C θα μπορούσε να γίνει έτσι
(αφαιρεί τα πολλαπλά συνεχόμενα κενά και τα αντικαθιστα με ένα μόνο κενό)

Κώδικας: Επιλογή όλων


#include <stdio.h>
#include <string>

void removeMultipleSpaces&#40;char &#91;&#93;,char &#91;&#93;&#41;;


int main&#40;int argc, char *argv&#91;&#93;&#41;&#123;
int i, n, z;
char protasi&#91;80&#93;;
char protasiReducedSpaces&#91;80&#93;;
printf&#40;"\nDose mia protasi "&#41;;
fgets&#40;protasi,80,stdin&#41;;
fflush&#40;stdin&#41;;
if &#40;protasi&#91;strlen&#40;protasi&#41;-1&#93;=='\n'&#41;
    protasi&#91;strlen&#40;protasi&#41;-1&#93;='\0';
printf&#40;"\nH protasi einai <%s>\n",protasi&#41;;
removeMultipleSpaces&#40;protasi,protasiReducedSpaces&#41;;
printf&#40;"\n h protasi me meiomena spaces einai <%s>",protasiReducedSpaces&#41;;
getchar&#40;&#41;;
return 0;
&#125; 
void removeMultipleSpaces&#40;char prin&#91;&#93;,char meta&#91;&#93;&#41;&#123;
    int j=0,i,length=strlen&#40;prin&#41;;
    for &#40;i=0;i<length;i++&#41;&#123;
        if &#40;prin&#91;i&#93;!=' '&#41;
            meta&#91;j++&#93;=prin&#91;i&#93;;
        else&#123;
            meta&#91;j++&#93;=prin&#91;i&#93;;
            while &#40;prin&#91;i&#93;==' '&#41;
                i++;
            if &#40;prin&#91;i-1&#93;==' '&#41;
                i--;
        &#125;
    &#125;
    meta&#91;j&#93;='\0'; 
&#125;


Peek-a-Boo
Δημοσιεύσεις: 14
Εγγραφή: 16 Νοέμ 2010 12:01
Τοποθεσία: gr

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από Peek-a-Boo » 16 Δεκ 2010 14:28

einai gia C++

Episis an vgalw to cout << str <<endl
apo thn func kai to valw sthn main etsi: cout << z << endl mou vgazei kati arithmous.

Prepei na pw oti apo ayta p grapsate den katalava oute ta misa :)

virxen 75 --> doulepse mia xara alla pedevomai tosh wra na ta enwsw metaksi tous alla tpt.Isws epeidh einai C.
Pantws to Dev-C++ to trexei kanonika.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από gvre » 16 Δεκ 2010 15:03

Peek-a-Boo έγραψε:einai gia C++

Episis an vgalw to cout << str <<endl
apo thn func kai to valw sthn main etsi: cout << z << endl mou vgazei kati arithmous.
Λογικό αν σκεφτείς τι ακριβώς είναι το z. Ένα ωραίο tutorial για να ξεκινήσεις είναι το C++ Language Tutorial. Ρίξε μια ματιά στις 3 πρώτες ενότητες ( Basics of C++, Control Structures, Compound Data Types ).

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από virxen75 » 16 Δεκ 2010 22:39

Peek-a-Boo έγραψε:einai gia C++
virxen 75 --> doulepse mia xara alla pedevomai tosh wra na ta enwsw metaksi tous alla tpt.Isws epeidh einai C.
Pantws to Dev-C++ to trexei kanonika.
να ενώσεις τι με τι?

Peek-a-Boo
Δημοσιεύσεις: 14
Εγγραφή: 16 Νοέμ 2010 12:01
Τοποθεσία: gr

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από Peek-a-Boo » 17 Δεκ 2010 02:51

Na valw ayth th diadikasia mesa sth dikia mou main.
Episi dokimasa to anapodo, na valw thn dikia mou diadikasia sthn dikia sou main
alla me tpt den mporw na exw san output kai ta dyo mazi(aferesh char kai aferesi kenwn)

Κώδικας: Επιλογή όλων

void removeMultipleSpaces&#40;char prin&#91;&#93;,char meta&#91;&#93;&#41;&#123; 
    int j=0,i,length=strlen&#40;prin&#41;; 
    for &#40;i=0;i<length;i++&#41;&#123; 
        if &#40;prin&#91;i&#93;!=' '&#41; 
            meta&#91;j++&#93;=prin&#91;i&#93;; 
        else&#123; 
            meta&#91;j++&#93;=prin&#91;i&#93;; 
            while &#40;prin&#91;i&#93;==' '&#41; 
                i++; 
            if &#40;prin&#91;i-1&#93;==' '&#41; 
                i--; 
        &#125; 
    &#125; 
    meta&#91;j&#93;='\0'; 
&#125; 

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από virxen75 » 18 Δεκ 2010 01:02

κάτι τέτοιο προσπαθείς να κάνεις?

Κώδικας: Επιλογή όλων

#include <cstdlib>
#include <iostream>

using namespace std;


int func&#40;char remove,char protasi&#91;80&#93;&#41;&#123;
    string str = protasi;
    for&#40;string&#58;&#58;iterator it = str.begin&#40;&#41;; it!=str.end&#40;&#41;; &#41;&#123;
        if&#40;*it == remove &#41;&#123;
            it = str.erase&#40; it &#41;;
        &#125;
        else
            it++;
    &#125;
    cout << str << endl;
&#125;

void removeMultipleSpaces&#40;char prin&#91;&#93;,char meta&#91;&#93;&#41;&#123;
    int i,j=0;
    string prinStr,metaStr;
    prinStr=prin;
    for&#40;string&#58;&#58;iterator it = prinStr.begin&#40;&#41;; it!=prinStr.end&#40;&#41;; &#41;&#123;
       if &#40;*it!=' '&#41;&#123;
            meta&#91;j++&#93;=*it;
        &#125;
        else&#123;
            meta&#91;j++&#93;=*it;
            while &#40;*it==' '&#41;
               it++;
            it--;
        &#125;
        it++;
    &#125;
    meta&#91;j&#93;='\0';

&#125; 
int main&#40;int argc, char *argv&#91;&#93;&#41;&#123;
    char i;
    int n, z;
    char protasi&#91;80&#93;;
    char noMultipleSpaces&#91;80&#93;;
    cout<<"Dose mia protasi&#58;";
    gets&#40;protasi&#41;;
    cout<<"H protasi einai "<<protasi<<endl;
    cout<<"Dose to gramma pou thes na aferethei&#58; ";
    cin>>i;
    z=func&#40;i,protasi&#41;;
    cout<<"h protasi xoris polapla kena einai"<<endl;
    removeMultipleSpaces&#40;protasi,noMultipleSpaces&#41;;
    cout<<noMultipleSpaces<<endl;
    system&#40;"PAUSE"&#41;;
    return EXIT_SUCCESS;
&#125; 





Peek-a-Boo
Δημοσιεύσεις: 14
Εγγραφή: 16 Νοέμ 2010 12:01
Τοποθεσία: gr

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από Peek-a-Boo » 18 Δεκ 2010 13:46

Se ayto aferei ton xarakthra pou theloume se mia protash alla afhnei ta pollapla kena, kai paei se allh seira kai aferei ta kena alla afhnei ton xarakthra.
Ayto to pragma ginotan kai den mporw na to ftiaksw, thelw me thn mia fora na aferei kai ton xarakthra kai ta kena...
Eyxaristw poly pantws virxen75 exei voithisei poly :)
Tha to palepsw na dw ti ginetai

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από virxen75 » 18 Δεκ 2010 14:03

Peek-a-Boo έγραψε:Se ayto aferei ton xarakthra pou theloume se mia protash alla afhnei ta pollapla kena, kai paei se allh seira kai aferei ta kena alla afhnei ton xarakthra.
Ayto to pragma ginotan kai den mporw na to ftiaksw, thelw me thn mia fora na aferei kai ton xarakthra kai ta kena...
Eyxaristw poly pantws virxen75 exei voithisei poly :)
Tha to palepsw na dw ti ginetai
αν το θες να γίνεται ξεχωριστικά με 2 συναρτήσεις κάνε το έτσι.Αν πάλι το θες σε μία συνάρτηση πες το.

Κώδικας: Επιλογή όλων

#include <cstdlib>
#include <iostream>

using namespace std;


int func&#40;char remove,char protasi&#91;80&#93;&#41;&#123;
    string str = protasi;
    for&#40;string&#58;&#58;iterator it = str.begin&#40;&#41;; it!=str.end&#40;&#41;; &#41;&#123;
        if&#40;*it == remove &#41;&#123;
            it = str.erase&#40; it &#41;;
        &#125;
        else
            it++;
    &#125;
    strcpy&#40;protasi,str.c_str&#40;&#41;&#41;;//για να επιστρέψω τις αλλαγές στην main
&#125;

void removeMultipleSpaces&#40;char prin&#91;&#93;,char meta&#91;&#93;&#41;&#123;
    int i,j=0;
    string prinStr,metaStr;
    prinStr=prin;
    for&#40;string&#58;&#58;iterator it = prinStr.begin&#40;&#41;; it!=prinStr.end&#40;&#41;; &#41;&#123;
       if &#40;*it!=' '&#41;&#123;
            meta&#91;j++&#93;=*it;
        &#125;
        else&#123;
            meta&#91;j++&#93;=*it;
            while &#40;*it==' '&#41;
               it++;
            it--;
        &#125;
        it++;
    &#125;
    meta&#91;j&#93;='\0';

&#125; 
int main&#40;int argc, char *argv&#91;&#93;&#41;&#123;
    char i;
    int n, z;
    char protasi&#91;80&#93;;
    char noMultipleSpaces&#91;80&#93;;
    cout<<"Dose mia protasi&#58;";
    gets&#40;protasi&#41;;
    cout<<"H protasi einai "<<protasi<<endl;
    cout<<"Dose to gramma pou thes na aferethei&#58; ";
    cin>>i;
    z=func&#40;i,protasi&#41;;
    cout<<"h protasi xoris ton xaraktira "<<i<<" einai&#58;"<<protasi<<endl;
    cout<<"h protasi xoris polapla kena einai"<<endl;
    removeMultipleSpaces&#40;protasi,noMultipleSpaces&#41;;
    cout<<noMultipleSpaces<<endl;
    system&#40;"PAUSE"&#41;;
    return EXIT_SUCCESS;
&#125; 




Peek-a-Boo
Δημοσιεύσεις: 14
Εγγραφή: 16 Νοέμ 2010 12:01
Τοποθεσία: gr

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από Peek-a-Boo » 18 Δεκ 2010 16:22

Kala e eisai theos....
Xilia eyxaristw!!!
Twra menei mono na katsw na thn katalavw pws doulevei :D

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Pws tha eferesw ta kena apo ena String ???

Δημοσίευση από dva_dev » 19 Δεκ 2010 19:43

Σε μία function και τα δύο έτσι για να υπάρχει

Κώδικας: Επιλογή όλων

//input &#58; input string
//output&#58; buffer for output string
//remove&#58; character to remove

void foo&#40;const char* input, char* output, char remove&#41;
&#123;
    for &#40;char ch = 1; ch; input++&#41;
    &#123;
        if &#40;&#40;ch == *input&#41; && &#40;ch == ' '&#41;&#41; continue;
        ch = &#40;*output&#41; = &#40;*input&#41;;
        if &#40;ch != remove&#41; output++;
    &#125;
&#125;

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης