Tam Sürümünü Görmek İçin : C de iki char arasındaki charları almak?
Diyelim bir stringim var.Örnek "<Bu yazının burası alınacak>" adında..
ben nasıl < ve > arasındaki karakterleri alabilirim?Var mı bunun için bir fonksiyon yoksa yazılmalı mı?
myavuzselim
08/04/2007, 19:49
Sunun gibi birsey olabilir. Hatali durumlari test etmiyor.
char *bas, *son;
char *sonuc;
bas = strchr(ch, '<');
son = strchr(bas+1, '>');
sonuc = (char*) malloc((son-bas)*sizeof(char));
strncpy(sonuc, bas+1, son-bas-1);
aslında yapmak istediğin çok da zor bir şey değil.iki if kontrolüyle çok rahatlıkla yapabilirsin.algoritma olarak anlatmak gerekirse."<" karekterinden sonraki her karakteri bir pointera veya bir diziye at ">" karakterine geldiğin anda da diziyi kapat veya pointerı sonlandır.bunun için üç parametre alan(ikisi karakter biri dizi) bir fonksyion tanımlayıp istediğin zaman onu çağırarak kolaylaştırmış olursun işini.tam olarak nerde kullanacağını bilsem kodunu da yazardım ama yapacağın şeye göre farklılık gösterebilir.
Yok fonksiyon istemiyorum ben hazırda bir fonksiyon olup olmadığını öğrenmek istedim aslında.Cevaplar için teşekkürler.
acehreli
09/04/2007, 00:47
myavzselim, strcpy o durumda '\0' sonlandirma karakterini koymayacaktir. Ya kendimiz eklemeliyiz, ya da malloc+strncpy+'\0' yonteminin esdegeri olan strndup'u kullanabiliriz.
Tabii bir sakincasi, strndup C standardinda olmadigi icin her platformda olmayabilir. Ama POSIX dahil, cogu standartta/ortamda var.
Ali
myavuzselim
09/04/2007, 15:26
Cabukca http://www.cppreference.com/stdstring/strncpy.html adresinden bakmistim. Orada "the remainder is padded with '\0'" ifadesini gorunce kendisi koyuyor diye dusunmustum, yanlis anlamisim.
acehreli
09/04/2007, 22:04
strncpy benim hep kafami karistiriyor. Bir kac kere okumadan emin olamiyorum. :)
Ali
Yok fonksiyon istemiyorum ben hazırda bir fonksiyon olup olmadığını öğrenmek istedim aslında.Cevaplar için teşekkürler.
neden illa hazırını arıyorsun ben de onu anlayamadım :)
şöyle bir main yazdım.efficent olduğu söylenemez hatta inefficent bir çözüm oldu ama iş görür.string fonksiyonlarını kullanmadan ancak bu kadar yapabildim.umarım faydası olur da ayrı bi fonksiyon olarak kendin yazıp kullanırsın
#include <stdio.h>
#include <string.h>
int main(){
char dizi[50]="sosyalmesajvermeyelim";
char ch1='l';
char ch2='v';
char last[50];
int cnt=0;
int x=strlen(dizi),i;
for(i=0;i<x;i++){
if(dizi[i]==ch1){
i++;
while(dizi[i]!=ch2){
last[cnt]=dizi[i];
i++;
cnt++;
}
break;
}
}
for(i=0;i<cnt;i++)
printf("%c",last[i]);
return 0;
}
golgepapaz
11/04/2007, 05:34
Eger tek fonksiyon istiyor ve c++ kullanabiliyorsan, text manipulasyonu icin boost kutuphanelerinin regular expression kutuphanesini kullanabilirsin. regex kutuphanesi C++ TR1(technical report) e dahil,yani yakinda C++ standardina dahil olacak.
#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace boost;
using namespace std;
int main()
{
string text("sen diyorsun ki <Bu yazının burası alınacak> degil mi, dostum?");
// bu bir regex, parantezin icindeki ".+" 1 veya daha fazla
// hersey demek, yani buyuk kucuk isaretleri arasindaki herseyi ariyoruz
regex pattern("<(.+)>");
match_results<string::const_iterator> what; //burda bizim sonuclariniz tutuluyor
// text'in icindeki patterni ara ve whatin icine koy/
while(regex_search(text,what,pattern))
{
string aratext(what[1].first,what[1].second);// eger eslesme olduysa bunu bir stringe kopyalayalim
cout<< aratext;
}
}
regexlerle cok daha zor seyler yapilabiliyor, ama bu senin ihtiyacin icin yeterli...
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.