EDIT: Mengedit semuanya, maaf atas kesalahpahaman.

Saya mencoba menulis fungsi untuk menemukan kata terbesar secara leksikografis dalam sebuah string.

Sebuah kata didefinisikan sebagai: berisi huruf - dapat menggunakan isalpha() - dan tidak mengandung spasi - dapat menggunakan isspace()

Jika s = "Dia llo wor l d "

S berisi kata-kata berikut : He, llo, wor, l, d.

Untuk menemukan kata terbesar secara leksikografis di antara dua string, saya dapat menggunakan strcmp.

Prototipe fungsi adalah : char *biggestWord(char *s) dan harus mengembalikan kata terbesar secara leksikografis.

Aku benar-benar terjebak dengan itu selama berjam-jam. Inilah yang saya coba lakukan:

Aku terjebak pada apa yang harus dilakukan selanjutnya. Ide algoritme saya bahkan tidak akan berfungsi jika ada dua spasi berturut-turut.

char *biggestWord(char *s) {
//We will find the first string and compare it to each one of the new strings
//We will keep the value of the higher string everytime
char *res;
char *temp;
int indexStart = 0; //Will contain the index of the first character to then store on temp
int indexEnd = 0; //Will contain the index of the last character to then store on temp
for(int i = 0; s[i] != '\0'; i++) {
    if(isspace(s[i])) {
        indexEnd = i - 1;
        temp = myStrCpy(s, indexStart, indexEnd); //Will extract the string using start and end index, and put it into temp
        indexStart = i+1;
    }
}

}

-1
Rayan Dev 24 Mei 2021, 13:42

1 menjawab

Jawaban Terbaik

Berikut adalah solusi yang mungkin:

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

char* biggestWord(char* s) 
{
    // Create a buffer for bigest word
    char* buf = calloc(strlen(s) + 1, sizeof(char));
    if (buf == NULL)
        return NULL;
    // Create a buffer for current word
    char* word = malloc(strlen(s) + 1 * sizeof(char));
    if (word == NULL)
        return NULL;

    int j = 0;
    for (int i = 0; s[i]; i++) {
        if (isspace(s[i])) {
            // We found end of word, replace the space by a nul byte
            strncpy(word, s + j, i - j);
            word[i - j] = 0; // nul terminate
            if (strcmp(buf, word) < 0) {
                // we got a bigger word according to strcmp()
                strcpy(buf, word);
                // skip remaining spaces
                while (s[i] && isspace(s[i]))
                    i++;
                // Remember where a word starts
                j = i;
            }
        }
    }
    free(word);
    return buf;   // cAller must call free()
}

void main(void)
{
    char* res = biggestWord("He llo wor l d ");
    if (res) {
        printf("Result=\"%s\"", res);
        free(res);
    }
}

biggestWord mengembalikan pointer ke string yang dialokasikan secara dinamis, sehingga harus dibebaskan oleh pemanggil.

-1
fpiette 24 Mei 2021, 11:41