Zastosowanie funkcji substr

0
for (int j = 0; j < bialeZnaki.size(); j++)
        {
                std::vector<std::string> myvector(bialeZnaki.size());
                myvector[j] = content.substr(j == 0 ? 0 : bialeZnaki[j], bialeZnaki[j]); // problem z wartosciami substr
                std::cout << bialeZnaki[j] << std::endl;
                std::cout << myvector[j] << std::endl;
        } 
  • pętla obsługująca

Takie parametry w tym momencie przyjmuje moje substr podczas wywołania programu (kolejnych iteracji pętli):

0, 3
6, 6
11, 11
12, 12
17, 17
22, 22
29, 29

natomiast chcialbym zeby wygladaly one tak :

0, 3
3, 6
6, 11
11, 12
12, 17
17, 22
22, 29

Jakie parametry powinienem ustawić dla substr aby wynik był pożądany? bialeZnaki to vector przechowujący liczby. Dziękuje za pomoc

dodanie znaczników <code> - furious programming

1

Wygląda na to, że drugi argument przy kolejnej iteracji jest przekazywany jak pierwszy więc po prostu go zapamiętuj i przekazuj.

1

to: std::vector<std::string> myvector(bialeZnaki.size()); - musi być przed pętlą.

myvector[j]=content.substr(j?bialeZnaki[j-1]:0,bialeZnaki[j]);

ewentualnie:

std::vector<std::string> myvector(bialeZnaki.size());
for(int j=0,p=0,q;j<bialeZnaki.size();++j,p=q) myvector[j]=content.substr(p,q=bialeZnaki[j]);
0

Tak dokładnie o to mi chodziło @_13th_Dragon jednak cały czas mój program nie działa tak jak myślałem że będzie, mianowicie te liczby przedstawiają pozycje znaków białych w pliku tekstowym, chciałem żeby ta pętla wyodrębniła wyrazy występujące między tymi znakami białymi i potem zapisala je w jakiejs sensownej strukturze w pamieci jednak nadal nie mogę dojść jak to zrobić ...

przykładowy wynik mojego programu dla pliku .txt zawierającego zdanie "Ala ma kota lubi jesc placki jest mloda piekna bystra."

Ala
 ma ko
 kota lubi
 lubi jesc plack
 jesc placki jest mlo
 placki jest mloda piekna by
 jest mloda piekna bystra.
 mloda piekna bystra.
 piekna bystra.
 bystra.
Press any key to continue . . .

czyli prawidłowym wynikiem (takiego jaki oczekuje) powinno być coś takiego:

Ala
ma
kota
lubi
jesc
placki
jest
mloda
piekna
bystra 

Jakieś sugestie? Byłbym bardzo wdzięczny.

1
#include <set>
#include <cctype>
#include <cstdio>
#include <iostream>
using namespace std;

int main()
  {
   string str;
   set<string> tb;
   for(int ch=0;ch!=EOF;)
     {
      if(isalpha(ch=cin.get())) str+=(char)ch;
      else if(str.size())
        {
         tb.insert(str);
         str.resize(0);
        }
     }
   for(set<string>::iterator i=tb.begin();i!=tb.end();++i) cout<<*i<<endl;
   return 0;
  }

lub:

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

int main()
  {
   for(char ch=0,last='\n';cin.get(ch);)
     {
      if(isalpha(ch)) cout.put(last=ch);
      else if(last!='\n') cout.put(last='\n');
     }
   return 0;
  }
0

@_13th_Dragon już podążając twoim kodem wpadłem na taki pomysł:

std::vector<std::string> myvector(bialeZnaki.size());
	for (int j = 0, p = 0, q; j < bialeZnaki.size(); ++j, p = q)
	{
		if (j != 0){
			q = bialeZnaki[j];
			myvector[j] = content.substr(p+1, q - p);
			std::cout << myvector[j] << std::endl;
		}
		else
		{
			q = bialeZnaki[j];
			myvector[j] = content.substr(p, q - p);
			std::cout << myvector[j] << std::endl;
		}
	} 

Wszystko działa okej, bardzo dziękuje za szybką pomoc!

1
xynth69 napisał(a):

@_13th_Dragon już podążając twoim kodem wpadłem na taki pomysł: ...

... czyli nic a nic w nim nie zrozumiałeś.

  std::vector<std::string> myvector(bialeZnaki.size());
  for(unsigned j=0,p=0,q;j<bialeZnaki.size();++j,p=q+1)
    {
     q=bialeZnaki[j];
     myvector[j]=content.substr(p,q-p);
     std::cout<<myvector[j]<<std::endl;
    }
0

No fakt. W każdym razie bardzo dziękuje.

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