Dzielenie ciagu znaków C.

0

Napisać programy który rozdziela łańcuch znaków gdy napotka zadany symbol np: "+", wie ktos jak to zrobic gdy nie wiemy ile bedzie takich znakow np "abc+def+ghi+jkl" ??

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


int main()
{
    char* w;
    char* k;
    char* o;
    char a[100],*calkowita,*urojona;
    int dlugosc,dlugosc2;


    printf("Podaj liczbe\n");
    scanf("%s",&a);
    printf("twoja liczba to:%s\n",a);

    w=strchr(a, '+');
    dlugosc=w-a;
    calkowita=malloc((dlugosc+1)*sizeof(char));
    calkowita[dlugosc]='\0';
    strncpy (calkowita, a, dlugosc);
    printf("czesc calkowita to: %s\n",calkowita);


    k=strchr(a, '\0');
    dlugosc2=k-w;
    urojona=malloc((dlugosc2+1)*sizeof(char));
    urojona[dlugosc2]='\0';
    strncpy (urojona, w+1, dlugosc2);
    printf("czesc urojona to: %s",urojona);



    return 0;
}
 
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_WORDS 1000
#define MAX_LEN 10000

int FindCharInString(char * src, int pos, char letter)
{
	unsigned int i = pos; 
    unsigned int len = strlen(src);
	while(i < len)
	{
		if(src[i] == letter)
			return i;
		i = i + 1;
	}
	return -1;
}

int main(int argc, char ** argv)
{
	char pBufferIn[MAX_LEN];
	unsigned long ulLenBufferIn = 0;
	unsigned long ulCurrentPosInBuffer = 0;
	unsigned long ulFindedChar = 0;
	char ** pszBufferOut = (char**)(malloc(MAX_WORDS * sizeof(char*)));
	int iWords = 0;
	int i = 0;

	puts("Ciag znakow > \n");
	scanf("%s", pBufferIn);

	ulLenBufferIn = strlen(pBufferIn);

	while(1)	
	{
		ulFindedChar = FindCharInString(pBufferIn, ulCurrentPosInBuffer, '+');
		if(ulFindedChar == -1)
		{
			pszBufferOut[iWords] = (char*)(malloc( ulLenBufferIn - ulCurrentPosInBuffer + 1));
			memcpy(pszBufferOut[iWords], (char*)(pBufferIn+ulCurrentPosInBuffer), ulLenBufferIn - ulCurrentPosInBuffer);
			pszBufferOut[iWords][ulLenBufferIn - ulCurrentPosInBuffer] = '\0';
			iWords = iWords + 1;
			break;
		}
		
		pszBufferOut[iWords] = (char*)(malloc(ulFindedChar - ulCurrentPosInBuffer + 1));
		memcpy(pszBufferOut[iWords], (char*)(pBufferIn+ulCurrentPosInBuffer), ulFindedChar - ulCurrentPosInBuffer);
		pszBufferOut[iWords][ulFindedChar - ulCurrentPosInBuffer] = '\0';

		ulCurrentPosInBuffer = ulFindedChar + 1;
		iWords = iWords + 1;
	}

	while(i < iWords)
	{
		printf("[%i] = %s\n", i, pszBufferOut[i]);

		i = i + 1;
	}

	i = 0;
	while(i < iWords)
	{
		free(pszBufferOut[i]);
		i = i + 1;
	}
		
	free(pszBufferOut);

	return 0;
}

Chyba oto chodziło.
http://ideone.com/rMaoZa

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