Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program w języku C używający wskaźniki do określenia długości łańcucha znaków.(Bez wykorzystania gotowej funkcji bibliotecznej)

Ostatnio zmodyfikowano 2015-11-18 05:54
Autor Wiadomość
gegos101
Temat założony przez niniejszego użytkownika
Program w języku C używający wskaźniki do określenia długości łańcucha znaków.(Bez wykorzystania gotowej funkcji bibliotecznej)
» 2015-11-16 21:50:12
Witam.
Dostałem zadanie na kolokwium do wykonania i niestety nie wiem za bardzo jak się za nie zabrać...
Oto treść zadania:
"Funkcja określająca długość łańcucha bez funkcji bibliotecznej.łańcuch wprowadzić z klawiatury a wynik długości wyświetl. "

Proszę o wskazówki i pomysły na wykonanie. Z góry dziękuję za pomoc.

P-140241
Gibas11
» 2015-11-16 22:26:54
Durne zadanie a wskaźniki są tam dodane (bardzo) na siłę, ale nic, nie o to chodzi. Jedyne co przychodzi mi do głowy to zrobienie wskaźnika wskazującego na 1. Element tablicy i podbijanie go o jeden aż element na który będzie wskazywać będzie równy '\0' (koniec ciągu) jednocześnie inkrementując jakąś zmienną (dajmy na to "piesek"), po wykonaniu pętli, "piesek" powinno być równe długości ciągu. Chyba że tablicę też potraktować jako wskaźnik (co jest oczywiście prawdą), tyle że wtedy jest to wymuszone przez narzucony język - C, i nie byłoby potrzeby osobnego informowania o tym. A samo polecenie brzmi jak tłumaczone translate.google.com. ("używający wskaźniki" - serio?).
P-140246
j23
» 2015-11-17 11:42:27
jednocześnie inkrementując jakąś zmienną
Wystarczy różnica wskaźników.
P-140277
elradziu
» 2015-11-17 13:28:00
Tak jak kolega Gibas11 powiedział, że zadanie trochę bez sensu żeby na siłę wszędzie wciskać wskaźniki.

A ciąg znaków możesz wczytać do samej tablicy która defakto jest wskaźnikiem na pierwszy element tablicy. Albo wykorzystyjesz zmienną typu string tworzysz wskaźnik na nią. I przekazujesz do własnoręcznie napisanej funkcji. I tam już operujesz na przekazanym wskaźniku. Jak to dokładnie wykonasz i ile wskaźników będziesz chciał utworzyć to twoja sprawa. W końcu chyba nie jest to zadanie z optymalizacji.

Taki mały przyklad:
C/C++
#include <iostream>

using namespace std;
int myfunc( char * wsk )
{
    int i = 0;
    while( !(( wsk[ i ] ) == '\0' ) ) i++;
   
    return i;
}
int main()
{
    char data[ 10 ];
    cin >> data;
    int x;
    x = myfunc( data );
    cout << endl << "WYNIK: " << x << endl;
   
    return 0;
}
P-140285
Gibas11
» 2015-11-17 16:27:58
@Up program miał być w C, iostream odpada... A szkoda, nie lubię printf i scanf. :/
@j23 Racja, mój błąd.

Ja zrobiłem to tak:
C/C++
#include <stdio.h>
int main()
{
    char cString[ 64 ];
    scanf( "%s", cString );
   
    char * last = cString;
    while( * last != '\0' )
         last++;
   
    printf( "%i", last - cString );
    return 0;
}
Może da się prościej.
P-140307
elradziu
» 2015-11-17 17:07:06
@Up... chyba kolega już tyle ogranie? Tak sądzę. A zresztą w tym konkretnym przypadku czy język C czy też C++ to tylko determinuje sposób obsługi we/wy danych. Nic więcej :)

2. Trzeba było napisać funkcję bo inaczej wykorzystanie wskaźnika to już w ogóle się z celem chyba mija :p
3. Zresztą ile osób tyle będzie rozwiązań. A każdy znajdzie coś dla siebie :)
P-140310
Gibas11
» 2015-11-17 18:28:31
1. W C niema też std::string, może komuś byłoby to potrzebne.
2. Używanie tu wskaźników w ogóle mija się z celem, więc na jedno wychodzi. :P Poza tym jest funkcja licząca długość ciągu -
main()
, a to że robi coś więcej to inna bajka. ^^
3. Trudno się nie zgodzić. :)
P-140312
j23
» 2015-11-17 19:07:26
Tak jak kolega Gibas11 powiedział, że zadanie trochę bez sensu żeby na siłę wszędzie wciskać wskaźniki.
No błagam. To zadanie ma Ci pokazać, co można zrobić ze wskaźnikiem poza zwykłym wskazywaniem na coś tam. Arytmetyka wskaźnikowa to podstawy C. Nie znasz jej - nie znasz C. Idąc dalej. Zobacz, jak wyglądają funkcje z <algorithm> w C++. Prawie wszystkie operują na iteratorach, a iterator to taka abstrakcja wskaźnika. A chyba nie powiesz, że "trochę bez sensu jest wciskać wszędzie iteratory" (szczególnie tam, gdzie indeksy kompletnie nie mają zastosowania).


@Gibas11, to nie błąd, tylko niepotrzebne komplikowanie sprawy ;)
P-140316
« 1 » 2
  Strona 1 z 2 Następna strona