• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odwracanie tekstu

Object Storage Arubacloud
+1 głos
1,554 wizyt
pytanie zadane 29 maja 2018 w C i C++ przez Agnes Użytkownik (990 p.)

Mógłby ktoś ocenić poniższy kod i napisać, czy i jak dałoby się to napisać tak, by funkcja była bardziej uniwersalna/efektywna/prostsza/lepsza pod jakimś innym względem?

void zadanie()
{
	const int n = 6;
	char tekst[n] = { 'a', 'b', 'c', 'd', 'e', 'f' };
	char rev[n];
	

	for (int i = 0; i < n; i++)		
	{								
		rev[i] = tekst[(n - 1) - i];
	}
	for(int i = 0; i < n; i++)
		cout << rev[i];
}

 

komentarz 29 maja 2018 przez Jakub 0 Pasjonat (23,120 p.)
1. Po pierwsze lepiej kiedy tekst do odwrócenia będzie podawany jako argument dla funkcji ( możesz użyć tradycyjnych łańcuchów z C lub z std::string jeżeli piszesz to w c++ )

2. Co do samego tekstu, nie lepiej by był on w formie łańcucha? Tzn. dodajesz na koniec tekstu znak '\0' czyli nul, wtedy też nie będziesz musiał wypisywać tego tekstu w pętli for, lecz za pomocą np. printf()

3. Zamiast wyświetlać tekst w funkcji zwróć wskaźnik na niego ( jeżeli ma być to łańcuch jak w C to rzecz jasna musisz zrobić dynamicznie alokowaną tablice char'ów )
komentarz 29 maja 2018 przez draghan VIP (106,230 p.)

Zamiast wyświetlać tekst w funkcji zwróć wskaźnik na niego

O, a w jakim celu wskaźnik? :)

Dodałbym do listy po prostu skorzystanie z std::reverse()... :P

komentarz 29 maja 2018 przez Jakub 0 Pasjonat (23,120 p.)

Dodałbym do listy po prostu skorzystanie z std::reverse()... :P

Pisanie czegoś samemu zamiast korzystać z gotowych metod chyba bardziej uczy

O, a w jakim celu wskaźnik? :)

chodzi mi o funkcję:

char* zadanie(const char* str); //zwróci odwróconą wersje 

oczywiście było by prościej użyć std::string

komentarz 29 maja 2018 przez Hiskiel Pasjonat (22,830 p.)

Tak właściwe to po co to pisać? Po co wyważać drzwi od nowa? laugh

 

PS sam nie ogarniał tych nowostek, nie jesteś sam

komentarz 29 maja 2018 przez Agnes Użytkownik (990 p.)

Pisanie czegoś samemu zamiast korzystać z gotowych metod chyba bardziej uczy ;)

Też, ale główna przyczyna jest taka, że po prostu  takie mamy zadanie domowe.

 

2 odpowiedzi

0 głosów
odpowiedź 29 maja 2018 przez mokrowski Mędrzec (155,460 p.)

Nie no... można... 

#include <iostream>

void revStr(char * msg, std::size_t n) {
    char * end = msg + n - 2;
    while(msg < end) {
        char c = *end;
        *end-- = *msg;
        *msg++ = c;
    }
}

int main() {
    char msg[] = "Ala ma kota";
    revStr(msg, sizeof(msg));
    std::cout << msg << '\n';
}

Ale to takie kruche że ... lepiej nie... 

0 głosów
odpowiedź 31 grudnia 2020 przez AizoOz Początkujący (490 p.)

Podpinam się pod temat .

Dlaczego nie wczytuje mi pierwszego słowa ? 

#include <iostream>
#include <string>


int main() {
    
    const int ile = 2;
    
    std::string napis[ile];
    int dlugosc[ile];
    
    std::cout << "Podaj wyraz : ";
    std::cout << std::endl;
    
    for (int i = 0; i <= ile; i++)
    {
        std::cin >> napis[i];
        dlugosc[i] = napis[i].length();
    }
    
    
    for (int i = 0; i <= ile; i++)
    {
        std::cout << "Napis nr : " << i+1 << " to " << napis[i] << std::endl << dlugosc[i] << std::endl;
    }
    
    return 0;
}

 

komentarz 31 grudnia 2020 przez KumberTwo Dyskutant (8,270 p.)
Nie wiem czy na pewno problem jest w tym, ale deklarujesz 2 stringi a w pętli wczytujesz 3 razy - i=0, i=1, i=2. Dokładnie to samo jest w drugiej pętli
komentarz 31 grudnia 2020 przez AizoOz Początkujący (490 p.)
Dziękuję za nakierowanie.

String gdy zmieniłem na 3 to wczytywał napis 4 razy ( od 0 do 3 ) , więc wtedy usunąłem '=' z for i problem rozwiązało :)
komentarz 31 grudnia 2020 przez VBService Ekspert (252,660 p.)
edycja 1 stycznia 2021 przez VBService

@AizoOz, wink

#include<iostream>
#include<string.h>
#include<stdio.h>
 
int main() {     
    const int MAX_CHAR_PROCESSING = 100;
    char sentence[MAX_CHAR_PROCESSING], * word;
    
    std::cout << "Podaj zdanie (max. dlugosc: " << MAX_CHAR_PROCESSING << " znakow):\n";
    std::cin.getline(sentence, MAX_CHAR_PROCESSING);
    
    int length_ = strlen(sentence);
    std::string line = "+-----------+-----------------+---------+\n";
    
    printf("%s", line.c_str());
    printf("| Wyraz nr. |  Wyraz (fraza)  | Dlugosc |\n");
    printf("%s", line.c_str());

    int count_word = 0;
     
    word = strtok(sentence, " ");
     
    while (NULL != word) {
        count_word++;
        printf("|%6d%5c|%12s%5c|%5d%4c|\n", count_word, 32, word, 32, (int)strlen(word), 32);
        word = strtok(NULL, " ");
    }
   
    printf("%s", line.c_str());
    std::cout << "  Ilosc zankow: " << length_ << " (wszyskie + spacje)\n";
    std::cout << "    Ilosc slow: " << count_word;

    return 0;
}

Podobne pytania

0 głosów
1 odpowiedź 2,775 wizyt
pytanie zadane 4 marca 2018 w C i C++ przez bartez86 Nowicjusz (220 p.)
0 głosów
3 odpowiedzi 4,896 wizyt
0 głosów
1 odpowiedź 426 wizyt
pytanie zadane 12 grudnia 2016 w C i C++ przez ijo Nowicjusz (220 p.)

92,547 zapytań

141,389 odpowiedzi

319,506 komentarzy

61,931 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...