Sumowanie Char (łączenie)

Sumowanie Char (łączenie)
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 206
0

Witam

Chodzi o łączenie dwóch znaków z tablic char-ów.

Kopiuj
char *a = "abcdef";
char *b = "abcdef";

string wynik;
wynik = a[1] + b[2];

Robiąc jak powyżej (tablice lub wskaźniki) IDE konwertuje znaki na liczy i je dodaje dając jakiś znak zapisany do zmiennej wynik wynikający z kodów znaków dodanych. Poszukiwany przeze mnie wynik to np.: "bc" a nie coś o kodzie 197 (krzyżyk).

Pozdrawiam.

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
2

To

Kopiuj
char *a = "abcdef";

nie jest tablica charów. Co innego to:

Kopiuj
char a[] = "abcdef";

Aby połączyć te dwa znaki możesz użyć czegoś takiego (C++11)

Kopiuj
std::string wynik{ a[1], b[2] };

Albo lekko modyfikując Twój zapis:

Kopiuj
std::string wynik;
wynik = std::string() + a[1] + b[2];

Wtedy operator + jest odpowiednio przeciążony.

Poza tym to nie IDE konwertuje na liczby a kompilator.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

Ja tylko dorzucę, że to nie jest poprawny kod C++ w ogóle: https://dev.krzaq.cc/post/stop-assigning-string-literals-to-char-star-already/

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 206
0

Podsumowując zacznę tak, podana metoda z przeciążaniem działa, jednak czasowo jest dużo wolniejsza niż potraktowanie obu tablic char-ów jako stringi i wycinanie ze stringów wskazanych znaków.
Co do uwagi o niepoprawności kodu, to już inna sprawa. Bardzo często w różnych poradnikach i tutorialach spotkałem się z deklaracjami typu

Kopiuj
char *a = "abcdef";

no i kwestię tego kiedy można to stosować, kiedy nie pozostawiam już zwolennikom mieszania C, C++ i czasami jeszcze czegoś innego.

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
1

Te dwa zapisy będą działać w przypadku odczytu, jednak wynik próby zmiany zawartości stałej tekstowej (czyli wersji *a = abcdef) nie jest zdefiniowany i mogą pojawić się problemy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.