Pobieranie ilości jednakowych znaków w stringu.

0

Witajcie mam problem. Otóż mam zrobić program taki jak w tytule przykład :

Wejście : aaaaaabbbbbbddddddefg
Wyjscie :a6b6d6efg (czyli zsumował ilość 'a', ilość 'b', ilośc 'd' itp)

oto mój kod :

string GetValueOfChars(string chars)
{
	int size = chars.length();
	bool exit = false;
	stringstream ss;
	int z;
	string TheEnd = "";
	for(int i = 0; i < size; i+=z)
	{
		z = 1;
		while(!exit)
		{
			if(chars[i] == chars[z])
				z++;
			else
				exit = true;
		}
			
		if(z > 2)
		{
			ss << z;
			TheEnd += chars[i] + ss.str();
		}
		else
			TheEnd += chars[i];
	}
	return TheEnd;	
}
 

I mam 2 problemy ;D

  1. gdy wpisze wszystkie te same litery wyskakuje jakiś dziwny error ;) np :
    wejście : kkkkkkkkkkkkkkkkkkkkkkkkkkk
    wyjście : ERROR ;(

#EDIT = ten error wywala prawdopodobnie dlatego, że porównuje element chars[i] == chars[z] a chars[z] może już wcale nie istnieć (tzn nie będzie do kolejny element tablicy)

2)gdy wpisze tak jak powinno być w zadaniu :
wejście: kkkkkkkkrrrrrrrrefg
wyjście: k8rrrrrrrrefg
Jak widać nie zsumowało mi literki 'r'.

Jakieś sugestie ?

1

Lekcja na dziś: zliczanie. Takie jak na przykład w sortowaniu przez zliczanie. Policzyć ile razy wystąpiła jakaś literka nie jest trudno.

0

Prosze

#include <iostream>
using namespace std;
main()
{
      string f;
      int t,a=1;
      char b;
      cin>>t;
      for(int i = 0 ; i<t; ++i)
      {
              cin>>f;
              b=f[0];
              for(int k = 1 ; k<f.length()+1; ++k)
              {
                    if(b==f[k])a++;
                    else if(b!=f[k] || k<f.length()){
                    if(a>2){ 
                         cout<<b<<a;
                         a=1;
                         b=f[k];
                         }
                    else if(a==2){cout<<b<<b;
                                 a=1;
                                 b=f[k];}           
                    else if(a==1){cout<<b;
                    a=1;
                    b=f[k];}
              }
                    
              }
              cout<<endl;
      }
} 
0

dzięki za odp, zrobiłem po swojemu i działa jakoś ; d
Pozdrawiam

2

@Kłizzz twoje rozwiazanie ma O(n^2) a optymalne ma O(n). Na prawdę tak trudno doczytać jak działa zliczanie? Informatyka nie polega na pisaniu "na pałę" tylko na myśleniu.

0

Ja jestem poczatkujacy i mogłbys mi wytłumaczyc co znaczy O(n) i O(n^2) bo wiem mniej wiecej o co chodzi, ale wole sie upewnic.

1 użytkowników online, w tym zalogowanych: 0, gości: 1