Wybranie z tekstu liter, cyfr i innych znaków - Operacje na wskaźnikach

0

Witam napisałem taki oto program który za zadanie ma z podanego tekstu wybrać litery, liczby i inne znaki. Litery i liczby wybiera bezproblemowo problem pojawia się przy innych znakach. Próbowałem kilku sposobów żaden nie chce poprawnie wybierać innych znaków. Proszę o pomoc. Z góry dziękuje.

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int funkcja(char *t, int n);

	
main()
{
	int n,i,a,b,c;
        char *tekst;												
		
        printf("Podaj dlugosc tekstu jaki chcesz wprowadzic "); 
        scanf("%d", &n);
 
        tekst = (char*) malloc(n*sizeof(char));
		
		printf("Podaj tekst ");
		fflush(stdin);
		gets(tekst);
		
		if(strlen(tekst) > n)       
			{
			printf("\n\n--------------------podales za dlugi tekst------------------\n");
			printf("------------nie wszystkie elementy zostaną zliczone---------\n\n");
			}

		a=funkcja(tekst,n);
		printf("\n Długość tekstu %d \n", a);
		
}

int funkcja(char *t, int n)
{
	int i,m=0,y=0,u=0;
	char *litery;
	char *liczby;
	char *inne;
	litery = (char*) malloc(n*sizeof(char));
	liczby = (char*) malloc(n*sizeof(char));
	inne = (char*) malloc(n*sizeof(char));
	
	for(i=0; i<n; i++)
	{
		if(*(t+i) >= 'A' && *(t+i) <= 'Z' || *(t+i)>='a' && *(t+i) <='z')
		{
			*(litery+m) = *(t+i);
			*(litery+(m+1)) = '\0';
			m++;
		}
		else
		{
				*(litery+i) = '\0';
				*(inne+u) = *(t+i);
				u++;
		}

		
		if(*(t+i) >= '0' && *(t+i) <= '9')
		{
			*(liczby+y) = *(t+i);
			*(liczby+(y+1)) = '/0';
			y++;
		}
		else 
		{
			*(liczby+i) = '\0';
			*(inne+u) = *(t+i);
			u++;
		}
	
	}
	printf("\nIlosc liter wynosi %d\n", m);
	puts(litery);
	printf("\nIlosc cyfr wynosi %d\n", y);
	puts(liczby);
	printf("\nIlosc innych znakow wynosi %d\n", u);
	puts(inne);
	return (m+y+u);
}
0

Zmodyfikowałem troche pętle. Powinno działać:

 
for(i=0; i<n; i++)
        {
                if(*(t+i) >= 'A' && *(t+i) <= 'Z' || *(t+i)>='a' && *(t+i) <='z')
                {
                        *(litery+m) = *(t+i);
                        *(litery+(m+1)) = '\0';
                        m++;
			continue;
                }
		
                if(*(t+i) >= '0' && *(t+i) <= '9')
                {
                        *(liczby+y) = *(t+i);
                        *(liczby+(y+1)) = '/0';
                        y++;
			continue;
                }

  	
                 *(inne+u) = *(t+i);
                 u++;

 
        }


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