• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

C++, Funkcja.

Zombiexon

Member
Joined
Mar 12, 2011
Messages
220
Reaction score
7
Location
/home/var/
Witajcie,

Mam sobie Liczbę int u=10 000 ,int i = 15 000 , string a ("abcabc..etc i tak do 20000"), chce zrobić tak aby

litera w stringu na pozycji 10 000 po kolei przemieniając z 10 000 na 10 001 przeszła do 15k okej mam:

Code:
for(h=u;h<i;h++){ 
        swap(a[h] , a[h+1]);
         }

Lecz to działa za wolno jest możliwość zrobienia tego w inny sposób? jeśli tak to jak?


W sumie chciałem spróbować to w rekurencji lecz mam problem potem z przypisaniem tego string z funkcji do głównego programu.
a dokładnie( wczytuje stringa abc w funkcji zmieni się na bca lecz w main programie będzie dalej abc), z góry dzięki za pomoc!;)

Code:
int przemiana(string a,int u, int i )
{
    if(u==i){
               return 1;
               }
    else
    {
        swap(a[u],a[u+1]);
        return przemiana(a,u+1,i);     
    }   
}
 
Prawdopodobnie, z rekurencją będzie jeszcze wolniej, o ile wcześniej nie skończy się stos.

Aktualnie przekazujesz kopię stringa z każdym wywołaniem funkcji. Prawdopodobnie chcesz przekazywać referencję lub wskaźnik:
Code:
int przemiana(string& a,int u, int i )
{
    if(u==i){
               return 1;
               }
    else
    {
        swap(a[u],a[u+1]);
        return przemiana(a,u+1,i);     
    }   
}

Nie bardzo wiem, co miałoby być wynikiem tej funkcji. Podaj jakiś przykład albo opisz lepiej to pomyślimy jak to zoptymalizować.
 
Tak :

Mam zmienią i równą 2 , zmienią u równą 0 i stringa ("ABC")
a-string w tedy a[0]=A | a[1]=B | a[2]=C

po tej pętli ma się wykonać prosty schemat z pozycji stringa "0" ma przenieść na ostatnią pozycję w tym wypadku 2 , lecz ma to przenosić przekładając
litery do tyłu np:
-Wyraz ABC
BAC
BCA
 
Jeśli to ma tylko zmieniać kolejność stringa, żeby wychodziły ciągi "wspak", to lepiej przepisywać string do innego w pętli.

Coś w stylu:
Code:
int len = str.length();
char* temp = new char[len];
for(int i = 0; i < len; i++)
   temp[len - i - 1] = str.c_str()[i];
string wspak = string(temp, len);
delete[] temp;
 
Nie, nie ma wychodzić znak w spak, tutaj dostaje nałożone z góry wartości , tak jak mówiłem:

i=2;
u=0;
a[x]=("ABC");

a[0]=a[0+1]{"BAC"); , potem a[1]=a[1+1]{"BCA"} etc.

Muszę znaleźć jakieś uniwersum co będzie chodziło szybciej niż "Swap" w pętli.
-------------EDT:
Aby to jakoś lepiej z obrazować:

mamy stringa np:

A B C D F G H
i z tego wyrazu ma wziąć np literkę B:
A B C D F G H
i przenieść ją np do literki F przy czym ma przesunąć resztę liter w lewo.
A C D F B G H


Eidt2: Mam!:) , wystarczyło użyć erase i insert. ..Close.
 
Last edited:
Back
Top