C++ girilen metni alfabetik sıralayan program

ContisTR

Kilopat
Katılım
13 Mayıs 2017
Mesajlar
51
Daha fazla  
Cinsiyet
Erkek
Merhaba arkadaşlar. Konuda belirttiğim gibi C++'ta girilen bir metnin harflerini alfabetik sıraya göre sıralanmasını yapan program yapmamız istenildi ama aklıma bir fikir gelmiyor. Yardımcı olabilecek var mı?
 
#include<stdio.h>
#include<string.h>

int main() {
char kelime[5][20], gecici[20];
int i, j;

printf("\n5 farklı kelime giriniz : ");
for (i = 0; i < 5; i++)
scanf("%s", kelime);

for (i = 1; i < 5; i++) {
for (j = 1; j < 5; j++) {
if (strcmp(kelime[j - 1], kelime[j]) > 0) {
strcpy(gecici, kelime[j - 1]);
strcpy(kelime[j - 1], kelime[j]);
strcpy(kelime[j], gecici);
}
}
}

printf("\nSıralanmış hali : ");
for (i = 0; i < 5; i++)
printf("\n%s", kelime);
}


Kaynak

Mantık yukarıdaki gibi c++ koduna kendiniz çevirebilirsiniz.
 
char ile yaptığımda bir karakter alıyor. Mesela "Ali eve git" yazdığımda Ali'yi sıralıyor sadece. Diğerlerini algılayamıyor. onu çözemedim :(
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main() {
   int i,j,a,temp;
   char d;
   do {
      char word[2000]={0};
      a=0;
      printf("\nBir Kelime Girin ---> "); scanf("%s",&word);
      printf("\nGirdiginiz Kelime ---> %s",word);
      for(i=0;i<2000;i++) {
         if(word[i]>0) a++; }
//Yukarıdaki for döngüsünde girilen kelimenin kaç karakterden oluştuğu bulunuyor.
      for(i=0;i<a;i++) {
         for(j=0;j<i;j++) {
            if(word[i]<word[j]) {
               temp=word[i];
               word[i]=word[j];
               word[j]=temp;
            }
         }
      }
      //Bu for döngüsünde sıralama işlemi yapılıyor. Sıralama yaparken geçici bir değişken olarak temp kullanıldı.
      printf("\n\nKelimenin Alfabatik Sirali Sekli ---> ");
      for(i=0;i<a;i++)
         printf("%c",word[i]);
   printf("\n\nTekrar Denemek Ister Misiniz ? E/H ---> "); d=getch();
   } while ( d=='e' || d=='E' );
   getch();
}

Bunda sadece bir tanesini algılıyor. Onu kırmak için ne yapmam lazım?
 
Son düzenleyen: Moderatör:
Bu kodu yazmaya başladıktan sonra senin son paylaştığını gördüm. O C++ değil, C kodu.
Sıralamanın çeşitli yolları var. Birkaçını paylaştığım kodda gösterdim. Daha senin hangisini istediğin bile belli değil.

Bunda sadece bir tanesini algılıyor. Onu kırmak için ne yapmam lazım?
Bu ne demek? Neyin bir tanesini algılıyor?


Maşallah herkes C önermiş. Ben de en iyi bildiğim Bubble Sort ile yapayım bari.
Koşullu derleme mevcut. Hangisini istersen onu baştaki #ifdef'in oraya yazıp çalıştırırsın.
Ek kütüphaneler isteyebilir. Tam emin değilim.

Kod:
#include <iostream>
#include <string>

#define __ONCE_BUYUK_ALFABETIK__

using namespace std;

bool isSmaller(const char& item1, const char& item2) {

#ifdef __DUZ__
    return toupper(item1) < toupper(item2);
#endif

#ifdef __ONCE_BUYUK_ALFABETIK__
    if (toupper(item1) == toupper(item2)) {
        return item1 < item2;
    }
    return toupper(item1) < toupper(item2);
#endif

#ifdef __ONCE_BUYUK__
    return item1 < item2;
#endif
}

void swapItems(char& item1, char& item2) {
    char temp{ item1 };
    item1 = item2;
    item2 = temp;
}

string& sortStr(string& str) {
    for (auto i{ 0 }; i < str.size() - 1; ++i)
        for (auto j{ 0 }; j < str.size() - i - 1; ++j)
            if (!isSmaller(str[j], str[j + 1]))
                swapItems(str[j], str[j + 1]);

    return str;
}


int main() {
    string str;

    cout << "Metin giriniz: ";
    cin >> str;

#ifdef __ALL_LOWERCASE__
    for (char& c : str)
        c = tolower(c);

    sort(str.begin(), str.end());
    cout << "Sirali metin: " << str << endl;

    return 0;
#endif

    sortStr(str);

    cout << "Sirali metin: " << str << endl;

    return 0;
}
 
Bu kodu yazmaya başladıktan sonra senin son paylaştığını gördüm. O C++ değil, C kodu.
Sıralamanın çeşitli yolları var. Birkaçını paylaştığım kodda gösterdim. Daha senin hangisini istediğin bile belli değil.


Bu ne demek? Neyin bir tanesini algılıyor?


Maşallah herkes C önermiş. Ben de en iyi bildiğim Bubble Sort ile yapayım bari.
Koşullu derleme mevcut. Hangisini istersen onu baştaki #ifdef'in oraya yazıp çalıştırırsın.
Ek kütüphaneler isteyebilir. Tam emin değilim.

Kod:
#include <iostream>
#include <string>

#define __ONCE_BUYUK_ALFABETIK__

using namespace std;

bool isSmaller(const char& item1, const char& item2) {

#ifdef __DUZ__
    return toupper(item1) < toupper(item2);
#endif

#ifdef __ONCE_BUYUK_ALFABETIK__
    if (toupper(item1) == toupper(item2)) {
        return item1 < item2;
    }
    return toupper(item1) < toupper(item2);
#endif

#ifdef __ONCE_BUYUK__
    return item1 < item2;
#endif
}

void swapItems(char& item1, char& item2) {
    char temp{ item1 };
    item1 = item2;
    item2 = temp;
}

string& sortStr(string& str) {
    for (auto i{ 0 }; i < str.size() - 1; ++i)
        for (auto j{ 0 }; j < str.size() - i - 1; ++j)
            if (!isSmaller(str[j], str[j + 1]))
                swapItems(str[j], str[j + 1]);

    return str;
}


int main() {
    string str;

    cout << "Metin giriniz: ";
    cin >> str;

#ifdef __ALL_LOWERCASE__
    for (char& c : str)
        c = tolower(c);

    sort(str.begin(), str.end());
    cout << "Sirali metin: " << str << endl;

    return 0;
#endif

    sortStr(str);

    cout << "Sirali metin: " << str << endl;

    return 0;
}
Sağ olasın ama C++ kodu lazımdı. Sanırım halletim, son bir kaç ayarım kaldı.
 
C++ kodu lazımdı da birinin sana C ile C++ farkını da öğretmesi lazım herhalde. Sen C yazıyorsun. Benim paylaştığım C++.
Sanırım aldığın girdide boşluk olunca okumamasından şikayetçisin. Spagetti kodunu okuyup nerede hata yaptığını anlamaya çalışacağım.
scanf ile almışsın o öyle yapar. getline, fgets vb. birkaç şey kullanabilirsin.
 
Son düzenleme:
C++ kodu lazımdı da birinin sana C ile C++ farkını da öğretmesi lazım herhalde. Sen C yazıyorsun. Benim paylaştığım C++.
Sanırım aldığın girdide boşluk olunca okumamasından şikayetçisin. Spagetti kodunu okuyup nerede hata yaptığını anlamaya çalışacağım.
scanf ile almışsın o öyle yapar. getline, fgets vb. birkaç şey kullanabilirsin.
Evet kusura bakma 6 saattir bununla uğraşıyorum kafam gitti artık iyice karıştı :D görselde ki gibi olmaması yani ali alfabeye göre sıralayıp velili kendi içinde sıralandırması için napabilirim ?
Evet kusura bakma 6 saattir bununla uğraşıyorum kafam gitti artık iyice karıştı :D görselde ki gibi olmaması yani ali alfabeye göre sıralayıp velili kendi içinde sıralandırması için napabilirim ?
Bu arada deidğin gibi C istiyorum
Konu kilit sorun çözüldü.
 

Dosya Ekleri

  • ....png
    ....png
    1,2 KB · Görüntüleme: 109
Son düzenleme:

Geri
Yukarı