0

I have a file with say 4 sentences, I know that there are 4 because each sentence has '.' at the end.

What I did was read from the file given and paste each sentence in a 2 dimensional array like so:

char sentence[0][200] = "Hello how are you." char sentence [1][200] = "I'm good thanks. etc. Here is the code for this:

int main()
{
    char sentence[RSIZ][LSIZ]; 
    char fname[20] = "t.txt";
    FILE *fptr = NULL;


    int i = 0;
    int tot = 0;

    char c;
    int nrsentences = 0;

printf("\n\n Read the file and store the lines into an array :\n");
    printf("------------------------------------------------------\n");
    fptr = fopen(fname, "r");


    // Check if file exists
    if (fptr == NULL)
    {
        printf("Cant open the file %s", fname);
        return 0;
    }

    // Sentences counter from file
    for (c = getc(fptr); c != EOF; c = getc(fptr))
        if (c == '.')  // Increases if found '.'
            nrsentences = nrsentences + 1;

        fptr = fopen(fname, "r");
        for (i=0; i<nrsentences; i++)
            fgets(sentence[i], 200, fptr);

Then I would separate the this array in to words with this code: (still in main(){})

char newString[10][30];
    int j,ctr;

    j=0; ctr=0;
    for (int k = 0; k < nrsentences; k++) {
        for(i=0;i<=(strlen(frases[k]));i++)
        {
            // if space or NULL found, assign NULL into newString[ctr]
            if(sentence[k][i]==' '|| sentence[k][i]=='\0')
            {
                newString[ctr][j]='\0';
                ctr++;  //for next word
                j=0;    //for next word, init index to 0


            }
            else
            {
                newString[ctr][j]=sentence[k][i];
                j++;
            }
        }
    }
    printf("\n Strings or words after split by space are :\n");
    for(i=0;i < ctr;i++)
        printf(" %s ",newString[i]);
        

Then here is the problem (I think), the part of the scrambling code. This works like this: I give the code: the sentences and the inedex. by default it is like this

  • index-> 0 1 2 3
  • sentence-> Hello how are you

but with this code it converts to this:

  • index-> 3 2 0 1
  • sentence-> you are Hello how
int index[] = {2,3,5,1,0,4,7,6};  //here I have a function that generates the random list(which I dont know yet how to make it work here
    int n = nrsentences;


    randomize(newString, index, n, nrsentences);

    printf("Reordered array is: \n");
    for (int i=0; i<n; i++)
        printf ("%s ", newString[i]);
    return 0;
}

Here is the randomize() function

void randomize(char* arr[], int index[], int n, int nrsentences)
{
    printf("%d", n);
    char* temp[n];

    // arr[i] should be present at index[i] index
    //for (int k = 0; k < nrsentences; k++){
        for (int i=0; i<n; i++)
            temp[index[i]] = arr[i];

        // Copy temp[] to arr[]
        for (int i=0; i<n; i++)
        {
           arr[i] = temp[i];
           index[i] = i;
        }
    //}
}

And here is the index randomizer, which I dont know yet (didnt try) how to add it to the main, or randomize function.

int *random_number(int words)
{

    int array[25];
    int x, p, count;
    int i=0;

    srand(time(NULL));

    while(i< words){
        int r=rand()% words +1;

        for (x = 0; x < i; x++)
        {
            if(array[x]==r){
                break;
            }
        }
        if(x==i){
            array[i++]=r;
        }
    }
    for(p=0;p<words;p++){
        printf("%d ", array[p]);
}
return array;
} 

or

int array[25];
    int words = 5;
    int x, p, count;
    int i=0;

    srand(time(NULL));

    while(i< words){
        int r=rand()% words +1;

        for (x = 0; x < i; x++)
        {
            if(array[x]==r){
                break;
            }
        }
        if(x==i){
            array[i++]=r;
        }
    }
    for(p=0;p<words;p++){
        printf("%d ", array[p]);
  • 2
    You can't assign to an array. – Barmar Jan 14 '22 at 17:14
  • 1
    Are you prohibited from using `strcpy()` to copy the strings? – Barmar Jan 14 '22 at 17:15
  • 1
    Please fix your indentation. It looks like you're reopening the file every time through the `fgetc()` loop that counts sentences. – Barmar Jan 14 '22 at 17:18
  • And I recommend you get out of the habit of leaving out `{}` around the blocks of `if` and `for`. See https://stackoverflow.com/questions/359732/why-is-it-considered-a-bad-practice-to-omit-curly-braces?lq=1 – Barmar Jan 14 '22 at 17:20
  • You forgot to close the file before reopning it. You could also just use `fseek(fptr, 0, SEEK_SET);` to go back to the beginning. – Barmar Jan 14 '22 at 17:20
  • `newString` is a 2-dimensional array. The argument to `randomize()` must be an array of pointers. – Barmar Jan 14 '22 at 17:23
  • @Barmar no, I m not prohibited from using strcpy(). oh. – Alin Enrique Nascutiu Jan 14 '22 at 17:28
  • `char c;` ==> `int c;` ... otherwise the condition `c != EOF` is meaningless. – pmg Jan 14 '22 at 18:19

0 Answers0