Çözüldü Pointer kullanarak cümlenin kelimelerini bastan sona yazma

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

yup

Femtopat
Katılım
22 Ocak 2022
Mesajlar
8
Daha fazla  
Cinsiyet
Erkek
Kisaca fonksiyonun bunu yapması gerekiyor:

İlk cümle: "merhaba hava? Çok güzel.."
Yeni cümle: "güzel.. Çok hava? merhaba"

Bunu yapmaya calistim ama hiçbir fikrim yok ve tıkandım. Tersten for loop falan denedim ama pointerlar bayağı kafamı karistirdi.

C:
///// DO NOT USE the string library <string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_STR_LEN 1024
/////////////////////////////////////////////////

void reverse1(char *dest, char *src)
{

 //int n=0, i;
//for(i=n-1;i>=0;i--){
//while (src[i]!=" '&& j>=0)j;
}

}

This function takes a pointer to a Source ('src') string (an array
Of chars, with maximum size MAX_STR_LEN), and
Makes a New string Inside the destination ('dest') string
(Which is also passed as a pointer) so that the order
Of the words in the destination string is the reverse
Of the order in the Source string.

The only character to be used in separating words is
A blank space, so any other characters are considered
Part of a Word,
 
Çözüm
Pointer nasıl kafanı karıştırabilir ki, pointer bellek adresi tutan bir değişken bu kadar, başka bir esprisi yok.
char * variable;
variable = 0xFF23424... Bellek adresi atadık
*variable = 'a'; 0xFF23424.. belleğindeki boşluğa a değerini atadık.

Yapmak istediğin şeyin kodunu yazmak mantığını anlatmaktan daha basit, o yüzden ekledim. Daha basit şekilde yazılabilir, bunun üzerinden yürürsün.

C:
#include <stdio.h>

void func(char * sc, char *dst){
    size_t size=0, start=0;
    while(sc[size]!='\0')
    {
        dst[size] = ' ';
        size++;
    }
        
    for(size_t stop=0; stop < size+1; stop++)
    {
       if(sc[stop] == ' ' || stop == size )
       {
            for(size_t j= 0; j<(stop-start); j++)
            {
                *(dst+size-stop+j) = *(sc+start+j);
            }
            start = stop+1;
       }
    }
    dst[size] = '\0';
}

#define MAX_STR_LEN 1024

int main()
{
    char src[MAX_STR_LEN] = "merhaba hava? Cok guzel..";
    char dst[MAX_STR_LEN];
    func(src,dst);
    printf("%s",dst);

    return 0;
}
Pointer nasıl kafanı karıştırabilir ki, pointer bellek adresi tutan bir değişken bu kadar, başka bir esprisi yok.
char * variable;
variable = 0xFF23424... Bellek adresi atadık
*variable = 'a'; 0xFF23424.. belleğindeki boşluğa a değerini atadık.

Yapmak istediğin şeyin kodunu yazmak mantığını anlatmaktan daha basit, o yüzden ekledim. Daha basit şekilde yazılabilir, bunun üzerinden yürürsün.

C:
#include <stdio.h>

void func(char * sc, char *dst){
    size_t size=0, start=0;
    while(sc[size]!='\0')
    {
        dst[size] = ' ';
        size++;
    }
        
    for(size_t stop=0; stop < size+1; stop++)
    {
       if(sc[stop] == ' ' || stop == size )
       {
            for(size_t j= 0; j<(stop-start); j++)
            {
                *(dst+size-stop+j) = *(sc+start+j);
            }
            start = stop+1;
       }
    }
    dst[size] = '\0';
}

#define MAX_STR_LEN 1024

int main()
{
    char src[MAX_STR_LEN] = "merhaba hava? Cok guzel..";
    char dst[MAX_STR_LEN];
    func(src,dst);
    printf("%s",dst);

    return 0;
}
 
İfadeler: yup
Çözüm
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…