Monday, July 9, 2007

Write a simple piece of code to split a string at equal intervals.

Suppose you have a big string


This is a big string which I want to split at equal intervals, without caring about the words.


Now, to split this string say into smaller strings of 20 characters each, try this


#define maxLineSize 20

split(char *string)
{
int i, length;
char dest[maxLineSize + 1];

i = 0;
length = strlen(string);

while((i+maxLineSize) <= length)
{
strncpy(dest, (string+i), maxLineSize);
dest[maxLineSize - 1] = '\0';
i = i + strlen(dest) - 1;
printf("\nChunk : [%s]\n", dest);
}

strcpy(dest, (string + i));
printf("\nChunk : [%s]\n", dest);
}

11 comments:

  1. "while((i+maxLineSize) <= length)
    {
    strncpy(dest, (string+i), maxLineSize);
    dest[maxLineSize - 1] = '\0';
    i = i + strlen(dest) - 1;
    printf("\nChunk : [%s]\n", dest);
    }"

    "i = i + strlen(dest) - 1;" might be an overkill, since you should always be advancing "maxLineSize", and strlen() is expansive ...

    ReplyDelete
  2. Another efficient way of doing the same functionality....
    (sorry for no comments though)

    #include "stdio.h"
    #include "memory.h"
    #include "TCHAR.H"

    const int SplitInterval = 5;

    void Split(char InputString[])
    {
    char pTemp[SplitInterval+1];
    memset(pTemp,'\0',SplitInterval+1);
    int iLength = strlen(InputString);
    int index = 0;
    while(index < iLength)
    {
    strncpy(pTemp,(InputString+index),5);
    index+= SplitInterval;
    printf("Chunk : [%s] \n", pTemp);
    }
    }

    void main()
    {
    char pInput[] = "Let us make world a better place to live in by contributing as much as possible.";
    Split(pInput);
    }

    ReplyDelete
  3. str[]="abcdefghijklmnopqrstuvwxyz";
    int i,j;
    intk=0;
    while(i<strlen(str))
    {
    for(j=0;j<split;j++)
    {
    if(str[k]!='\0')
    {
    str1[k++]=str[i++];
    }
    str1[k++]='\0';
    }
    }
    }

    ReplyDelete
  4. OUTPUT:

    ab cd ef gh ij kl mn op qr st uv wx yz

    ReplyDelete
  5. // Return the number of strings formed
    int split_string(const char* sz, const int nSize)
    {
    char dest[nSize + 1];
    int nCount = 0;
    int nSrcIndex = 0;
    int nDstIndex = 0;

    dest[nSize] = '\0';
    while (*sz)
    {
    dest[nDstIndex] = *sz;

    if ((nSize - 1) == nDstIndex)
    {
    cout << dest << endl;
    nCount++;
    }

    nSrcIndex++; sz++;
    nDstIndex = nSrcIndex % nSize;
    }

    if (nDstIndex > 0)
    {
    dest[nDstIndex] = '\0';
    cout << dest << endl;
    nCount++;
    }

    return nCount;
    }

    ReplyDelete
  6. #include
    #include
    #include
    void main()
    {
    char str[]="vikaskumarjain";
    char str1[18];
    int i=0 ,j,k=0;
    int split=2;
    //clrscr();
    while(i<strlen(str))
    {
    for(j=0;j<split;j++)
    {
    str1[j++]=str[i++];
    printf("%c",str1[--j]);
    }
    //str1[j++]='\0';
    printf(" ");
    }



    getch();
    }

    ReplyDelete
  7. #include
    #include
    #include
    void main()
    {
    char str[]="vikaskumarjain";
    char str1[18];
    int i=0 ,j,k=0;
    int split=2;
    //clrscr();
    while(i<strlen(str))
    {
    for(j=0;j<split;j++)
    {
    str1[j++]=str[i++];
    printf("%c",str1[--j]);
    }
    //str1[j++]='\0';
    printf(" ");
    }



    getch();
    }

    ReplyDelete
  8. #include
    #include
    #include
    void main()
    {
    char str[]="vikaskumarjain";
    char str1[18];
    int i=0 ,j,k=0;
    int split=2;
    //clrscr();
    while(i<strlen(str))
    {
    for(j=0;j<split;j++)
    {
    str1[j++]=str[i++];
    printf("%c",str1[--j]);
    }
    //str1[j++]='\0';
    printf(" ");
    }



    getch();
    }

    ReplyDelete
  9. This comment has been removed by the author.

    ReplyDelete
  10. This code will split the string at equal intervals

    #include
    #include
    #define split 3
    using namespace std;
    int main()
    {
    string s="PROGRAMMING",ss;
    int start=0,i;
    for(i=1;i<=(s.length()/split)+(s.length()%split?1:0);i++)
    {
    ss=s.substr(start,split);
    start+=split;
    cout<<ss<<" ";
    }
    }

    ReplyDelete
  11. Thanks for the info. It is very helpful.
    RegardsEducational site
    Get jobs info at Educational site

    ReplyDelete