Rozciągnie wyrazów, C++

0

Byłby ktoś na tyle życzliwy, żeby zerknąć co nie tak zrobiłem?

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

int main() {
	int d;
	cin >> d;
	string s="",s2;cin>>s;
		while(cin>>s2) s+=" "+s2;
 	int j1=s.length();int d1 = d-1+2;int j2 = 1;
		while(d1>0)
	{
			if((s[j2] ==' ') && (s[j2+1]!=' '))
	{
				s.insert(j2+1, " ");
				d1--;j2++;j1++;
	}
				j2++;if(j2==1)j2=1;

	}
	cout<<s<<endl;
		return 0;
	}

Polega to na tym, że w wejściu podajemy :

  1. Liczbę, z przedziały od 1 do 1000.
  2. Podajemy wyraz oddzielony pojedynczymi spacjami(nie zaczyna i nie kończy się spacją) dodatkowo wyraz jest w cudzysłowie.

I wyjściowo program ma wypisać wyraz rozciągnięty do tylu znaków ile podaliśmy w wejściu(1)

Twoim zadaniem będzie rozciągnięcie odstępów między słowami w taki sposób, aby łańcuch (którego długość liczona jest bez otaczających go cudzysłowów) zajął łącznie tyle znaków, ile określono w pierwszej linii danych.

Spacje mają być dodane równomiernie.

Dodatkowo proszę was o wyrozumiałość, w c++ nie bawię się długo(miesiąc, albo dwa). Wydawało mi się, że kod jest dobry, ale program nie robi tego co oczekuję.
Z góry dziękuję :)

1

Ten kod jest daleki od bycia dobrym. Na początek nazwij zmienne sensownie, bo ciężko zrozumieć co to jest j1, j2, d, d1, d2. Tak samo trudno zrozumieć sens tych instrukcji:

int d1 = d-1+2

+1 nie wystarczy?

j1++

po co skoro i tak nigdzie z tego nie korzystasz?

I polecam jakiś formater, np: http://format.krzaq.cc/

0

formatuj kod i nadawaj zmiennym deskryptywne nazwy. Czym jest d1 i skąd mam to wiedzieć?

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

int main()
{
    int d;
    cin >> d;
    string s = "", s2;
    cin >> s;
    while (cin >> s2)
        s += " " + s2;
    int j1 = s.length();
    int d1 = d - 1 + 2;
    int j2 = 1;
    while (d1 > 0) {
        if ((s[j2] == ' ') && (s[j2 + 1] != ' ')) {
            s.insert(j2 + 1, " ");
            d1--;
            j2++;
            j1++;
        }
        j2++;
        if (j2 == 1)
            j2 = 1;
    }
    cout << s << endl;
    return 0;
}

aby łańcuch zajął łącznie tyle znaków, ile określono w pierwszej linii danych.

d1 = d - 1 + 2

W jaki sposób uwzględniasz długość dodanych wyrazów?

if ((s[j2] == ' ') && (s[j2 + 1] != ' ')) {

A co jeśli będziesz musiał dodać więcej spacji?

1
  1. Need - ile
  2. str - napis
  3. Zliczasz długość napisu len=str.size();
  4. Zliczasz ilość spacji w napisie - sp
  5. Zliczasz ilość spacji niezbędnych do wstawienia sn=Need-(len-2);
  6. Jeżeli sn<=0 zwracamy sam napis
  7. Obliczasz ile masz wstawić tych spacji cnt=sn/sp;
  8. Obliczasz resztę sn-=sp*cnt;
  9. W pętle od końca napisu po każdej spacji wstawiasz cnt+(--sn>=0) sztuk spacji

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