"Spacje" Spoj-problem

"Spacje" Spoj-problem
DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Witam! Chodzi o zadanie ze spoja. Wszystkie przykłady mi wychodzą dobrze, a jednak sędzia wyrzuca błędną odpowiedź. http://pl.spoj.com/problems/JSPACE/

Kopiuj
#include <iostream>
#include <string>

using namespace std;


int main()
{
    string napis;
    getline(cin,napis);
    string szukaj=" ";
    while(true)
    {
       size_t pozycja;
       pozycja=napis.find(szukaj);
       if(!(pozycja!=string::npos)) break;
       if(napis[pozycja+1]>=97 && napis[pozycja+1]<=122) napis[pozycja+1]-=32;
       napis.erase(pozycja,1);
    }
    cout<<napis;
    return 0;
}

 
szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
0

Testowałeś na kilku linijkach czy zawsze na jednej? :]

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Twój kod nie działa nawet z przykładem z zadania!
http://ideone.com/pGqO70
tak ma to wyglądać:

Kopiuj
int main()
{
    string linia;
    while(getline(cin, linia))
    {
         istringstream in(linia);
         string s;
         while(in >> s)
         {
               … … …
         }
         … … …
    }
    return 0;
}
DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

W sumie to na jednej, ale jak testować na kilku linijkach?

DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Dzięki za pomoc, wystarczyło go tylko tak przerobić :D :

Kopiuj
 #include <iostream>
#include <string>

using namespace std;


int main()
{
    string napis;
    string szukaj=" ";
   while(getline(cin,napis))
   {
    while(true)
    {
       size_t pozycja;
       pozycja=napis.find(szukaj);
       if(!(pozycja!=string::npos)) break;
       if(napis[pozycja+1]>=97 && napis[pozycja+1]<=122) napis[pozycja+1]-=32;
       napis.erase(pozycja,1);
    }
    cout<<napis<<endl;
   }
    return 0;
}
spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
0

Zastanów się przy okazji, czy naprawdę potrzebujesz dwóch pętli, dzielenia całości na linie i tak dalej.

Mimo czasu 0.0 rozważ opcję, w której przetwarzasz znak po znaku.

np:

Kopiuj
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

int main() {
	bool capitalize = true;
    char c = ' ';
    while((c = getchar()) != EOF) {
    	if(c == ' ') {
    		capitalize = true;
    	} else {
    		putchar(capitalize? toupper(c) : c);
    		capitalize = false;
    	}
    }
    return 0;
}
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
#include <cstdio>
#include <cctype>
using namespace std;

int main()
  {
   for(int ch,sp=1;(ch=getchar())!=EOF;0) if(ch==' ') sp=1; else if(ch=='\n') putchar('\n'); else if(!sp) putchar(ch); else { putchar(toupper(ch)); sp=0; }
   return 0;
  }
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
int main()
{
    string linia;
    while(getline(cin, linia))
    {
         istringstream in(linia);
         string s;
         in >> s;
         cout << s;
         while(in >> s)
         {
               s[0]=toupper(s[0]);
               cout << s;
         }
         cout << endl;
    }
    return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.