C dilinde stringdeki kelimelerin uzunluklarını bulma

KOUsoftware

Hectopat
Katılım
1 Nisan 2020
Mesajlar
159
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Hata vermiyor lakin çalışmıyor?

C:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int number_of_words(char *a){

    int i,word=1;

    for(i=0;a[i]!='\0';i++){

        if(a[i]==' '){

            word++;
        }
    }
    return word;
}

void longest_word(char *a){

    int i,longer;
    int number_word=number_of_words(a);

    int b[number_word];
    for(i=0;a[i]!='\0';i++){
        longer=0;
        while(a[i]!=' '){

            longer++;
        }
        b[i]=longer;
    }

    for(i=0;i<number_word;i++){

        printf("%d\n",b[i]);
    }
}

int main() {

    char name[]="Emre Ali Kamil";

    longest_word(name);

    return 0;
}
 
Hocam bir debug edin isterseniz. Nerede hata yaptığınızı bulursunuz. En çok da while kısmına bakın. Bug çok oluyor onda.
 
Son düzenleme:
C90 kullanıyorsanız kullanmayın. Değişkenlerinize güzel isim verin, longer hiç mantıklı bir isim değil.

int b[number_word]; bu geçerli bir kullanım değil. Sorun burada muhtemelen.

Ama değil. Sorun burada. While döngüsünde i değeri artmıyor. Sürekli aynı elemanın boşluğa eşit olup olmadığına bakıyor.

Kod:
for (int i = 0; a[i] != '\0'; ++i) {
    longer = 0;
    while (a[i] != ' ') {
        ++longer;
    }
      
    b[i] = longer;
}

Kelime sayısına ihtiyacınız olduğunu sanmıyorum. Boşluk görene kadar geçen karakter sayısını saysanız olmuyor mu?
For dışındaki if son karakterin boşluk olmaması sebebiyle var. Üstüne çok düşmeden aklıma başka bir şey gelmedi.

Kod:
#include <stdio.h>

void printLongestWord(char *a) {
    int i = 0;
    int len = 0;
    int maxLen = 0;
    char* maxPtr = 0;
   
    for (i = 0; a[i] != '\0'; ++i) {
        if (a[i] != ' ') {
            ++len;
        }
        else {
            if (len > maxLen) {
                maxLen = len;
                maxPtr = &a[i - maxLen];
            }
            len = 0;
        }
    }
   
    if (len > maxLen) {
        maxLen = len;
        maxPtr = &a[i - maxLen];
    }
   
    printf("%.*s", maxLen, maxPtr);
}

int main() {
    char name[] = "Emre Ali Kamil Elma Seftali";
    printLongestWord(name);

    return 0;
}
 
Son düzenleme:
Sanırım yaptığın yada yapmaya çalıştığın şey her kelimenin uzunluğunu bir array'a eklemek ardında da uzunlukları yazdırıyorsun.

İç içe döngünde bir sorun var. Arttırmıyorsun.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…