Sprawdzenie zadania ze SPOJA

0

Zwracam się z prośbą o jakieś rady dotyczące tego kodu, jestem początkujący dlatego szukam usprawnień w moim kodzie, a pewnie takie są oraz jakieś porady co robię źle, a co dobrze.
https://pl.spoj.com/problems/FLAMASTE/ - zadanie

#include <iostream>
#include <string.h>
using namespace std;

char slowo[200];
int main()
{
int test;
cin >> test;
    for(int m=0; m<test; m++){
        int licznik = 1;
        int licz = 0;
        int n1=0;
        cin >> slowo;
        while(n1 != strlen(slowo) && m != test){
                for(int n=0; n<strlen(slowo); n++){
                    if ((slowo[n] > 64) && (slowo[n] < 91)){
                        n1++;
                    }
                else{
                    cin >> slowo;
                    m++;
                    break;
                }
            }
        }
     for(int i=0,k=1; i<strlen(slowo); i++){
        while(slowo[i]==slowo[k]){
                licznik++;
                k++;
            }
        i = k-1;
        if(licznik > 2){
            cout << slowo[i] << licznik;
            licznik = 0;
        }else if(licznik == 2){
            cout << slowo[i] << slowo[i];
            licznik = 0;
        }
        else{
            cout << slowo[i];
            licznik = 0;
        }
     }
     cout << endl;
    }
}
3
  1. Jeśli wczytane słowo ma mieć maks 200 znaków, to tablicę musisz zarezerwować na 201 znaków, bo każdy ciąg znaków w C/C++ kończy się zerem, więc masz 1 dodatkowy znak.
  2. Podziel sobie kod na funkcje.
  3. Licz strlen(slowo) raz a nie za każdym razem.
  4. Jak piszesz w C++ to użyj std::string a nie tablicy znaków.

Reszty kodu niespecjalnie chce mi się analizować bo masz tutaj to dość pogmatwane, ale ogólnie najprostsza wersja jaką mam to:

#include <stdio.h>

void compress(char *str) {
  char last = 0;
  size_t count = 0;

  while (*str) {
    if (last == *str) {
      count++;
    } else {
      switch (count) {
      case 2: putc(last);
      case 1: putc(last);
      case 0: break;
      default: printf("%c%u", last, count);
      }

      last = *str;
      count = 1;
    }
    str++;
  }
}

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