Informatică, întrebare adresată de Liviu1, 9 ani în urmă

Se dă un şir de caractere ce conţine cuvinte formate din litere mici ale alfabetului englez, separate prin unul sau mai multe spații.

Cerinţa
Să se afişeze şirul obţinut după eliminarea din șir unor spații, astfel încât între cuvinte să fie un singur spațiu și să nu nu existe spații înainte de primul cuvânt și nici după ultimul .

Date de intrare
Programul va citi de la tastatură şirul dat.

Date de ieşire
Programul va afişa pe ecran şirul transformat corespunzător.

Restricţii şi precizări
șirul dat va conține cel mult 255 caractere, litere mici ale alfabetului englez și spații

Exemplu

Intrare

        in       vacanta   plec la mare     (e spatiu si dupa mare)
Ieşire  

in vacanta plec la mare


artur99: pff :)) in php era destul un trim($var) apoi str_replace(" ", " ", $var) si gata =))
Liviu1: In C++
artur99: mda, m-am prins XD

Răspunsuri la întrebare

Răspuns de artur99
4
#include <iostream>
#include <string>
using namespace std;

int main(){
   string str;int i;
   getline(cin, str);
   while(str[0]==' ') str.erase(0,1);
   while(str[str.length()-1]==' ') str.erase(str.length()-1,1);
   for(i=0;i<str.length();i++){
       cout<<str[i];
       if(str[i]==' '&&str[i+1]==' ')i++;
   }
   return 0;
}

**////////////EDIT - acu inlocuieste si daca sunt 3 sau mai multe spatii unul dupa altul/////////////**
#include <iostream>
#include <string>
using namespace std;

int main(){
   string str;unsigned int i;
   getline(cin, str);
   while(str[0]==' ') str.erase(0,1);
   while(str[str.length()-1]==' ') str.erase(str.length()-1,1);
   for(i=0;i<str.length();i++){
       cout<<str[i];
       int k=0;
       if(str[i]==' ')while(1){
           if(str[i+k+1]==' ')k++;
           else break;
       }
       i+=k;
   }
   return 0;
}

Liviu1: Multumesc ! O intrebare as mai avea: cum as putea sa limitez sirul pe 256 de caractere, eventual sa lucrez cu char str[256] ? Am vazut ca functia str.erase nu mai functioneaza daca pun char.
artur99: nu cred ca ai nevoie de o asa limitare
artur99: adica cerinta iti zice ca poate avea max 256, si doar atat...
Răspuns de AntiEaglesDavids
2
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string n;
    getline(cin, n);
    for(int i=0, f=0; i < n.length(); i++) {
        if(n[i] == ' ')
            if(f) { cout << ' ', f = 0; }
            else continue;
        else { cout << n[i], f = 1; }
    }
    return 0;
}


artur99: nu merge
artur99: lasa un spatiu in plus la capat
AntiEaglesDavids: sigur sigur :))
artur99: :D
artur99: nu ai editat raspunsul, deci inca scoate gresit
Alte întrebări interesante