strlen, łańcuch znaków

0

Hejka mam takie zadnie i teraz nie wiem jak mam dalej to wykonać,
Tworzę tablicę typu char
potem tworzę tablice typu int żeby zliczała mi te znaki
ale co dalej? Co robię nie tak, że program przestaje działać?
Z góry dziękuję za jakieś propozycje.

/*Napisz własną wersję funkcji strlen(), która oblicza długość łańcucha znaków języka C.
Napisz program, który zaprezentuje działanie funkcji (przykład z użyciem łańcucha znaków
jako stała i jako zmienna)*/

#include <stdio.h>
#include <string.h>
 
 
int main()
{
	char tekst[1000000];
	int zlicz[1000000]={};
	int i=0;
	printf("Podaj tekst\n", tekst);
	scanf("%[^\n]s", &tekst);
	
	
	
	while(tekst[i]) 
        {
                zlicz[i]+=1;
                i++;
        }

	
    printf( "Lancuch ma dlugosc: %d znakow.\n", zlicz );
   
    return 0;
}
0

Po co stworzyłeś tablicę zlicz?

0

Jak wyżej, po co tablica:

    char tekst[1000000];
    int i=0;
    printf("Podaj tekst\n");
    scanf("%s", tekst);
    printf("%s\n", tekst);
    int cnt = 0;
    while (tekst[i]){
        ++cnt;
        ++i;
    }
    printf("%d\n", cnt);
0

printf( "Lancuch ma dlugosc: %d znakow.\n", zlicz ); - tutaj podajesz wskaźnik na pierwszy element tablicy, a nie końcową zliczoną wartość.

0

oki, dziękuję wszystkim za szybką odpowiedź,
Mam pytanko w sprawie tej części

while (tekst[i]){
        ++cnt;
        ++i;
    }

czy nie powinno być tak?
Znaczy, jeżeli ma policzyć znaki to w skład tego wchodzi również koniec (\0)?
No bo my tego nie widzimy?
Wiec jak powinien wyświetlić?

 while (tekst[i]){
        cnt++;
        i++;
    }
0
Patryk27 napisał(a):

Po co stworzyłeś tablicę zlicz?

Nie było innego pomysłu na to zadanie, wiec tylko na coś takiego wpadłem.
a czy z tymi tablicami udałoby się zrobić tak, zeby działało poprawnie?

0

a czy z tymi tablicami udałoby się zrobić tak, zeby działało poprawnie?

Wszystko się da, ale pytanie po co? Bo takie rozwiązanie jest kompletnie bez sensu.

0

Znaczy, jeżeli ma policzyć znaki to w skład tego wchodzi również koniec (\0)?

No nie wchodzi, bo właśnie liczymy dopóki nie natrafimy na koniec, czyli '\0'

a czy z tymi tablicami udałoby się zrobić tak, zeby działało poprawnie?

Dałoby sie, tylko po co sobie komplikowac życie, bo inkrementując tablice, znowu Musisz teraz podać długość tablicy integerów...

0

oki, dzięki :D
Czyli ta wersja jest poprawna?

 while (tekst[i]){
        cnt++;
        i++;
    }
0

Jak najbardziej; nie działa, tylko jak się wciśnie ENTER , albo spację/spacje zamiast podania jakiegokolwiek znaku, ale to już problem funkcji scanf.
https://stackoverflow.com/questions/30220691/how-to-get-empty-input-or-only-enter-in-c#30220797

2
it234 napisał(a):

Napisz własną wersję funkcji strlen(), która oblicza długość łańcucha znaków języka C.

Gdzie masz zdefiniowaną jakąkolwiek funkcję nie licząc main?
Treść zadania wyraźnie mówi, że masz to zrobić.

Polecam skorzystać z tego kodu:


int mystrlen(const char *s)
{
    return -1; // TODO
}

void logTestResult(const char* file, int line, const char* name, int expected, int actual)
{
    if (expected == actual) {
         printf("%s:%d  \"%s\" len = %d PASS.\n", file, line, name, actual);
    } else {
         printf("%s:%d  \"%s\" FAIL!!!\nexpected: %d\n  actual: %d\n\n", file, line, name, expected, actual);
    }
}

TEST(S) logTestResult(__FILE__, __LINE__, S, strlen(S), mystrlen(S))

int main()
{
    TEST("");
    TEST("1");
    TEST("12");
    TEST("very long text which should work to");

    return 0;
}
0
for(const char *p=str;*p;++p) {}
return (p-str);

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