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;
}
 
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:

Technopat Haberler

Yeni konular

Geri
Yukarı