odwrócenie stringa w miejscu - jak?

0

Witam, jak odwrócić stringa w miejscu? Najchętniej w C++/Pythonie/Javie

Nie mogę wpaść na żaden pomysł :P

Napisałem tylko to:

zdanie = "Ala ma kota"
tab = zdanie.split()
newTab = []
for i in range(0, len(tab)):
    newTab.append((tab[len(tab)-1-i]))
print(newTab)

ale to przeciez nie o to chodzi ...

0

pseudokod:

for i:=0 to s.length/2
   swap(s[i], s[s.length-i-1])
3

Stringi w Javie i Pythonie są niemutowalne, w przeciwieństwie do stringów w C++.

2
std::string str = "ala ma kota";
std::reverse(str.begin(), str.end());

std::reverse to mniej więcej:

template <class BidirectionalIterator>
  void reverse ( BidirectionalIterator first, BidirectionalIterator last)
{
  while ((first!=last)&&(first!=--last))
    swap (*first++,*last);
}

z: http://www.cplusplus.com/reference/algorithm/reverse/

0

W Pythonie

l = list(zdanie)
l.reverse()
wynik = "".join(l)
0

W Pythonie:

wynik = zdanie[::-1]
0

W Javie:


class Rev{
	public static void main(String[] args){
		String temp = "", s1 = "dupsko wielkie";
		
		
		for(int i = s1.length() - 1; i >= 0; i--)
			temp += s1.charAt(i);
		
	}
}

0
Wibowit napisał(a):

Stringi w Javie i Pythonie są niemutowalne, w przeciwieństwie do stringów w C++.

Oczywiście zawsze można zamienić na char[], zrobić swoje i z powrotem na String. Wymaga dodatkowo napis.length*2 bajtów pamięci.

2

Operator konkatenacji w pętli to bardzo kiepski (wydajnościowo) pomysł.

String s = "wielkie dupsko";
StringBuilder sb = new StringBuilder(s);
String wynik = sb.reverse().toString();

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