34

--- C# Kılavuzu --- Teller

Düzenli programlama açısından, dize dize veri türü C#'ın en önemlilerinden biridir. Bu tür, karakter dizilerini tanımlar ve destekler. Diğer bazı programlama dillerinde, bir dizi bir karakter dizisidir. Ve C#'da dizeler nesnelerdir. Bu nedenle, dize türü başvuru türlerinden biridir.

Sıra yapımı

Bir karakter dizesi oluşturmanın en kolay yolu, bir dize değişmezi kullanmaktır. Örneğin, aşağıdaki kod satırında, dizge başvuru değişkeni str'ye bir dizge değişmezine bir başvuru atanır:

String str = "Örnek string";

Bu durumda, str değişkeni "Örnek Dize" karakter dizisiyle başlatılır. char türünde bir diziden dize türünde bir nesne de oluşturulabilir. Örneğin:

Karakter karakteri = ("e", "x", "a", "m", "p", "l", "e"); string str = yeni string(chararray);

Dize türünde bir nesne oluşturulduktan sonra, alıntılanan metin dizesinin gerekli olduğu her yerde kullanılabilir.

dize kalıcılığı

İşin garibi, string türündeki bir nesnenin içeriği değiştirilemez. Bu, bir karakter dizisi oluşturulduktan sonra değiştirilemeyeceği anlamına gelir. Ancak bu sınırlama, karakter dizilerinin daha verimli bir şekilde uygulanmasına katkıda bulunur. Dolayısıyla bu, ilk bakışta bariz bir dezavantaj aslında avantaja dönüşüyor. Bu nedenle, zaten var olan bir dizenin bir varyasyonu olarak bir dize gerekiyorsa, bu amaçla gerekli tüm değişiklikleri içeren yeni bir dize oluşturulmalıdır. Ve kullanılmayan dize nesneleri otomatik olarak "çöp" içinde toplandığından, gereksiz dizelerin akıbeti hakkında endişelenmenize bile gerek yok.

Ancak, dize referans değişkenlerinin (yani, dize türündeki nesnelerin) değişebileceği ve dolayısıyla başka bir nesneye başvurabileceği vurgulanmalıdır. Ancak dize nesnesinin içeriği, oluşturulduktan sonra değişmez.

Bir örnek düşünün:

Statik void addNewString() ( string s = "Bu benim vuruşum"; s = "Bu yeni vuruş"; )

Uygulamayı derleyelim ve ortaya çıkan derlemeyi ildasm.exe yardımcı programına yükleyelim. Şekil, void addNewString() yöntemi için oluşturulacak CIL kodunu göstermektedir:

Opcode ldstr'ye (dize yükü) yapılan birden çok çağrıya dikkat edin. CIL'deki bu ldstr işlem kodu, yönetilen öbek üzerine yeni bir dize nesnesinin yüklenmesine neden olur. Sonuç olarak, "Bu benim vuruşum" değerini içeren önceki nesne sonunda çöp toplanacak.

Dizelerle çalışma

Sınıfta System.String karakter verilerinin uzunluğunu belirlemek, mevcut dizgede bir alt dizgi aramak, karakterleri dönüştürmek için bir dizi yöntem sağlanmıştır. büyük harf dibe ve tam tersi, vb. İleride bu sınıfa daha detaylı bakacağız.

String sınıfının alanı, indeksleyicisi ve özelliği

String sınıfının tanımlanmış tek bir alanı vardır:

Genel statik salt okunur dize Boş;

Boş alan, boş bir dizeyi belirtir, yani. karakter içermeyen bir dize. Bu, basitçe var olmayan bir nesneye yapılan boş bir String başvurusundan farklıdır.

Ayrıca, String sınıfı tek bir salt okunur dizin oluşturucu tanımlar:

Genel karakter bunu ( get; )

Bu indeksleyici, belirtilen indeksteki karakteri almanızı sağlar. Diziler gibi dizi indeksleme sıfırdan başlar. String nesneleri kalıcıdır ve değişmez, bu nedenle String sınıfının salt okunur bir dizin oluşturucuyu desteklemesi mantıklıdır.

Son olarak, String sınıfı tek bir salt okunur özelliği tanımlar:

Public int Uzunluk ( get; )

Uzunluk özelliği, bir dizedeki karakter sayısını döndürür. Aşağıdaki örnek, bir dizin oluşturucunun ve Uzunluk özelliğinin kullanımını gösterir:

Sistemi Kullanmak; class Örnek ( static void Main() ( string str = "Basit dize"; // Dizinleyiciyi kullanarak dize uzunluğunu ve dizedeki 6. karakteri alın Console.WriteLine("Dize uzunluğu (0), 6. karakter "(1)"" , str.Uzunluk, str); ))

String Sınıfı Operatörleri

String sınıfı şu iki operatörü aşırı yükler: == ve !=. == operatörü, iki karakter dizisini eşitlik açısından test etmek için kullanılır. == operatörü nesne referanslarına uygulandığında, genellikle her iki referansın da aynı nesneye olup olmadığını kontrol eder. Ve == operatörü, String türündeki nesne başvurularına uygulandığında, eşitlik için dizelerin içerikleri karşılaştırılır. Aynısı != operatörü için de geçerlidir. String türündeki nesne başvurularına uygulandığında, dizelerin içerikleri eşitsizlik açısından karşılaştırılır. Aynı zamanda, = dahil olmak üzere diğer ilişkisel operatörler, diğer türlerdeki nesnelerle aynı şekilde String türündeki nesnelere yapılan başvuruları karşılaştırır. Ve bir dizgenin diğerinden büyük olup olmadığını kontrol etmek için String sınıfında tanımlanan Compare() yöntemini çağırmalısınız.

Daha sonra netleşeceği gibi, birçok türde karakter dizisi karşılaştırması kültürel bilgiyi kullanır. Ancak bu, == ve != operatörleri için geçerli değildir. Sonuçta, dizelerdeki karakterlerin sıra değerlerini karşılaştırırlar. (Yani kültürel normlar yani yerel ayarlar tarafından değiştirilmemiş ikili karakter değerlerini karşılaştırırlar.) Bu nedenle bu operatörler büyük/küçük harfe duyarsız ve kültüre duyarsız bir şekilde dize karşılaştırmaları gerçekleştirir.

Dize sınıfı yöntemleri

Aşağıdaki tablo, amaca göre gruplandırılmış, bu sınıfın daha ilginç yöntemlerinden bazılarını listeler:

Dize Yöntemleri
Yöntem Yapı ve aşırı yüklenmiş sürümler Amaç
Dize karşılaştırması
Karşılaştırmak() public static int Karşılaştırma(string strA, string strB)

Genel statik int Karşılaştır(string strA, string strB, bool görmezdenCase)

Genel statik int Karşılaştırma(string strA, string strB, StringComparison karşılaştırmaTürü)

Genel statik int Karşılaştırma(string strA, string strB, bool görmezdenCase, CultureInfo kültürü)

Statik Yöntem, strA dizesini strB dizesiyle karşılaştırır. strA, strB'den büyükse pozitif döner; strA, strB'den küçükse negatif; ve strA ve strB dizeleri eşitse sıfır. Karşılaştırma büyük/küçük harfe duyarlıdır ve kültürel olarak duyarlıdır.

IgnoreCase parametresi alırsa boole true, karşılaştırma büyük ve küçük harfler arasındaki farkları dikkate almaz. Aksi takdirde bu farklılıklar dikkate alınır.

CompareType parametresi, dizelerin karşılaştırılacağı belirli yolu belirtir. CultureInfo sınıfı, System.Globalization ad alanında tanımlanır.

genel statik int Karşılaştırma(dize strA, int indeksA, string strB, int indeksB, int uzunluk)

Genel statik int Karşılaştırma(string strA, int indexA, string strB, int indeksB, int uzunluk, bool yok saymaCase)

Genel statik int Karşılaştırma(string strA, int indexA, string strB, int indeksB, int uzunluk, StringComparison karşılaştırmaTürü)

Genel statik int Karşılaştırma(string strA, int indexA, string strB, int indeksB, int uzunluk, bool yok saymaCase, CultureInfo kültürü)

strA ve strB dizelerinin parçalarını karşılaştırır. Karşılaştırma, strA ve strB dize öğeleriyle başlar ve uzunluk parametresi tarafından belirtilen karakter sayısını içerir. strA'nın bir kısmı strB'nin bir kısmından büyükse, yöntem pozitif bir değer döndürür; strA'nın bir kısmı strB'nin bir kısmından küçükse negatif bir değer; ve strA ve strB dizelerinin karşılaştırılan kısımları eşitse sıfır. Karşılaştırma büyük/küçük harfe duyarlıdır ve kültürel olarak duyarlıdır.

karşılaştırmakSıralı() public static int CompareOrdinal(string strA, string strB)

Genel statik int CompareOrdinal(string strA, int indeksA, string strB, int indeksB, int sayı)

Compare() yöntemiyle aynı şeyi yapar, ancak yerel ayarlara bakılmaksızın

Karşılaştırmak() public int CompareTo(nesne değeri)

Çağıran dizeyi değer nesnesinin dize temsiliyle karşılaştırır. Çağıran dize, dize değerinden büyükse pozitif bir değer döndürür; çağıran dize değer dizesinden küçükse negatif bir değer; ve karşılaştırılan dizeler eşitse sıfır

public int CompareTo(string strB)

Çağıran dizeyi strB ile karşılaştırır

eşittir() public override bool Equals(nesne nesnesi)

Çağıran dize, nesnenin dize temsiliyle aynı karakter dizisini içeriyorsa, boolean true değerini döndürür. Sıralı karşılaştırma yapar, büyük/küçük harfe duyarlıdır, ancak kültürel olarak duyarsızdır

public bool Equals(dize değeri)

Public bool Equals(dize değeri, StringComparison karşılaştırmaTürü)

Çağıran dize, dize değeriyle aynı karakter dizisini içeriyorsa, true boole değerini döndürür. Sıralı bir karşılaştırma yapılır, büyük/küçük harfe duyarlıdır, ancak kültürel olarak duyarsızdır. CompareType parametresi, dizeleri karşılaştırmanın belirli bir yolunu tanımlar

public static bool Equals(string a, string b)

Public static bool Equals(string a, string b, StringComparison karşılaştırmaTürü)

a dizesi b dizesiyle aynı karakter dizisini içeriyorsa, boolean true döndürür. Sıralı bir karşılaştırma yapılır, büyük/küçük harfe duyarlıdır, ancak kültürel olarak duyarsızdır. CompareType parametresi, dizeleri karşılaştırmanın belirli bir yolunu tanımlar

Dizelerin birleştirilmesi (bağlantısı)
Concat() genel statik dize Concat(string str0, string str1);

public static string Concat(params string değerleri);

Ayrı dize örneklerini tek bir dizede birleştirir (birleştirme)
Bir dizide ara
içerir() public bool İçerir(dize değeri) Bir dizenin belirli bir alt dize (değer) içerip içermediğini belirlemenizi sağlayan bir yöntem
İle başlar() public bool StartsWith(dize değeri)

Public bool StartsWith(dize değeri, StringComparison karşılaştırmaTürü)

Çağıran dize alt dize değeriyle başlıyorsa, boolean true değerini döndürür. Aksi takdirde, false boole değeri döndürülür. CompareType parametresi, aramanın nasıl gerçekleştirileceğini belirtir.

Birlikte biter() public bool EndsWith(dize değeri)

Public bool EndsWith(dize değeri, StringComparison karşılaştırmaTürü)

Çağıran dize alt dize değeriyle bitiyorsa, boolean true değerini döndürür. Aksi takdirde, false boole değerini döndürür. CompareType parametresi, belirli bir arama yöntemini tanımlar

İndeksi() public int IndexOf(char değeri)

Public int IndexOf(dize değeri)

Bir dizede belirli bir alt dizenin veya karakterin ilk oluşumunu bulur. Aradığınız karakter veya alt dize bulunamazsa, -1 döndürülür.

public int IndexOf(char değeri, int startIndex)

Public int IndexOf(dize değeri, int startIndex)

Public int IndexOf(char değeri, int startIndex, int sayısı)

Public int IndexOf(dize değeri, int startIndex, int sayısı)

Çağıran dizede karakterin veya alt dize değerinin ilk oluşumunun dizinini döndürür. Arama, index startIndex'te belirtilen öğede başlar ve count parametresi (belirtilmişse) tarafından belirtilen öğe sayısını kapsar. Aranan karakter veya alt dize bulunamazsa, yöntem -1 değerini döndürür.

LastIndexOf() Aşırı yüklenmiş sürümler IndexOf() yöntemine benzer

IndexOf ile aynıdır, ancak bir karakterin veya alt dizenin ilk yerine son tekrarını bulur

IndexOfAny() public int IndexOfAny(char anyOf)

Public int IndexOfAny(char anyOf, int startIndex)

Public int IndexOfAny(char anyOf, int startIndex, int sayı)

Çağıran dizede bulunan anyOf dizisindeki herhangi bir karakterin ilk oluşumunun dizinini döndürür. Arama, index startIndex tarafından belirtilen öğede başlar ve count parametresi (varsa) tarafından belirtilen öğe sayısını kapsar. anyOf dizisindeki karakterlerden herhangi biri için eşleşme bulunamazsa, yöntem -1 değerini döndürür. Arama sıralı bir şekilde gerçekleştirilir

LastIndexOfAny Aşırı yüklenmiş sürümler IndexOfAny() yöntemine benzer

Çağıran dizede bulunan anyOf dizisindeki herhangi bir karakterin son oluşumunun dizinini döndürür

Dizeleri bölme ve birleştirme
Bölmek public string Split(params karakter ayırıcı)

Genel dize Böl(params karakter ayırıcı, int sayısı)

Belirtilen karakter veya dize dizisindeki öğelerle birbirinden ayrılmış, bu örnekte alt dizeleri olan bir dize dizisi döndüren bir yöntem.

Split() yönteminin ilk biçimi, çağıran dizeyi bileşen parçalarına böler. Sonuç, çağıran dizeden alınan alt dizeleri içeren bir dizidir. Bu alt dizeleri sınırlayan karakterler, ayırıcı diziye iletilir. Ayırıcı dizi boşsa veya boş bir dizeye başvuruyorsa, alt dize ayırıcısı olarak bir boşluk kullanılır. Ve ikinci formda Bu method count parametresi tarafından belirtilen alt dizelerin sayısını döndürür.

public string Split(params karakter ayırıcı, StringSplitOptions seçenekleri)

Genel dize Böl(dize ayırıcı, StringSplitOptions seçenekleri)

Genel dize Böl(params karakter ayırıcı, int sayısı, StringSplitOptions seçenekleri)

Genel dize Böl(dize ayırıcı, int sayısı, StringSplitOptions seçenekleri)

Split() yönteminin ilk iki biçimi, çağıran dizgiyi parçalara böler ve çağıran dizgeden elde edilen alt dizgileri içeren bir dizi döndürür. Bu alt dizileri ayıran karakterler, ayırıcı diziye iletilir. Ayırıcı dizisi boşsa, ayırıcı olarak bir boşluk kullanılır. Ve bu yöntemin üçüncü ve dördüncü biçimlerinde, count parametresiyle sınırlı olarak satır sayısı döndürülür.

Ancak tüm formlarda options parametresi, iki sınırlayıcı bitişik olduğunda oluşturulan boş dizeleri işlemek için belirli bir yol belirtir. StringSplitOptions numaralandırması yalnızca iki değeri tanımlar: Hiçbiri ve BoşGirdileri Kaldır. options parametresi None ise, bölmenin nihai sonucuna boş dizeler dahil edilir. orijinal dize. Seçenekler parametresi RemoveEmptyEntries olarak ayarlanırsa, orijinal dizeyi bölmenin nihai sonucundan boş dizeler hariç tutulur.

Katılmak() public static string Join(string ayırıcı, string değeri)

Genel statik dize Birleştirme(dize ayırıcı, dize değeri, int startIndex, int sayısı)

Bir dizi dizenin içeriğini birleştirerek yeni bir dize oluşturur.

Join() yönteminin ilk biçimi, değer dizisinde geçirilen birleştirilmiş alt dizelerden oluşan bir dize döndürür. İkinci form ayrıca değer dizisinde geçirilen alt dizelerden oluşan bir dize döndürür, ancak bunlar değer dizisinin öğesinden başlayarak belirli sayıda sayıyla birleştirilir. Her iki formda da, her ardışık satır, ayırıcı parametre tarafından belirtilen bir ayırıcı dize ile önceki satırdan ayrılır.

Doldurma ve düzeltme hatları
kırp() genel dize Trim()

Genel dize Trim(params char trimChars)

Geçerli dizenin başından ve sonundan belirli bir karakter kümesinin tüm oluşumlarını kaldırmanıza olanak tanıyan bir yöntem.

Trim() yönteminin ilk biçimi, çağıran dizeden baştaki ve sondaki boşlukları kaldırır. Ve bu yöntemin ikinci biçimi, çağıran karakter dizisindeki baştaki ve sondaki oluşumları trimChars dizisinden kaldırır. Her iki form da elde edilen dizeyi döndürür.

PadSol() public string PadLeft(int totalWidth)

Public string PadLeft(int totalWidth, char paddingChar)

Dizeyi soldaki karakterlerle doldurmanıza izin verir.

PadLeft() yönteminin ilk biçimi, çağıran dizenin sol tarafında boşluklar tanıtır, böylece toplam uzunluğu değere eşit totalWidth parametresi. Bu yöntemin ikinci biçiminde, toplam uzunluğu totalWidth parametresinin değerine eşit olacak şekilde, çağıran dizenin sol tarafına paddingChar parametresi tarafından belirtilen karakterler girilir. Her iki form da elde edilen dizeyi döndürür. totalWidth parametresinin değeri, çağıran dizenin uzunluğundan küçükse, değiştirilmemiş çağıran dizenin bir kopyası döndürülür.

PadSağ() PadLeft()'e benzer

Dizeyi sağdaki karakterlerle doldurmanıza izin verir.

Satır ekleme, silme ve değiştirme
Sokmak() public string Insert(int startIndex, string değeri)

Bir dizeyi diğerine eklemek için kullanılır; burada değer, startIndex dizininde çağıran dizeye eklenecek dizedir. Yöntem, elde edilen dizeyi döndürür.

Kaldırmak() public string Remove(int startIndex)

Genel dize Kaldır(int startIndex, int sayısı)

Bir dizenin bir kısmını kaldırmak için kullanılır. Remove() yönteminin ilk biçiminde, kaldırma, index startIndex tarafından belirtilen konumdan başlayarak ve dizenin sonuna kadar devam ederek gerçekleştirilir. Ve bu yöntemin ikinci biçiminde, startIndex dizininin belirttiği yerden başlayarak, count parametresi tarafından belirtilen karakter sayısı dizeden çıkarılır.

Yer değiştirmek() public string Replace(char oldChar, char newChar)

Public string Replace(string oldValue, string newValue)

Bir dizenin bir kısmını değiştirmek için kullanılır. Replace() yönteminin ilk biçimi, çağıran dizedeki tüm oldChar oluşumlarını newChar ile değiştirir. Ve bu yöntemin ikinci biçiminde, çağıran dizede oldValue dizesinin tüm oluşumları, newValue dizesiyle değiştirilir.

vaka değişikliği
ToUpper() genel dize ToUpper()

Çağıran dizedeki tüm harfleri büyük harf yapar.

Daha düşük() genel dize ToLower()

Çağıran dizedeki tüm harfleri küçük harf yapar.

Bir dizeden bir alt dize alma
alt dize() public string Substring(int startIndex)

Genel dize Substring(int startIndex, int uzunluk)

Substring() yönteminin ilk biçiminde, alt dize, startIndex parametresi tarafından belirtilen konumdan çağıran dizenin sonuna kadar çıkarılır. Ve bu yöntemin ikinci biçiminde, startIndex parametresinin gösterdiği yerden başlayarak, uzunluk parametresi tarafından belirtilen karakter sayısından oluşan bir alt dizi çıkarılır.

Aşağıdaki program örneği, yukarıdaki yöntemlerden birkaçını kullanır:

Sistemi Kullanmak; System.Collections.Generic kullanarak; System.Linq kullanarak; System.Text'i kullanarak; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( // İlk iki dizeyi karşılaştırın) string s1 = "bu bir dizedir"; string s2 = "bu bir metindir, bu bir dizedir"; if (String.CompareOrdinal (s1, s2) != 0) Console.WriteLine("s1 ve s2 dizileri eşit değildir"); if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine( "Ancak, aynı metni içerirler"); // Dize birleştirme Console.WriteLine(String.Concat("\n" + "Bir, iki ","üç, dört")); // Dize içinde ara // İlk geçtiği yer if (s2. IndexOf("this") != -1) Console.WriteLine("\"this\" kelimesi satırda bulundu, "+ "at: (0) konumunda", s2. IndexOf("this")); / / Alt dizenin son geçtiği if (s2.LastIndexOf("this") != -1) Console.WriteLine("\"this\" öğesinin son geçtiği yer " + "at ( 0) position", s2.LastIndexOf("this" )); // Karakter dizisinden arama char myCh = ("S","x","t"); if (s2.IndexOfAny(myCh) != -1) Console.WriteLine("Geçerli dizinde bulunan ch "+" dizisindeki karakterlerden biri (0)" konumundaki geçerli satır, s2.IndexOfAny(myCh)); // Dizenin verilen alt dizeyle başlayıp başlamadığını belirleyin if (s2.StartsWith("this is text") == true) Console.WriteLine("Alt dize bulundu!"); // Kullanıcının işletim sistemi dizesini belirleme örneğini kullanarak dizenin bir alt dize içerip içermediğini belirleyin // myOS = Environment.OSVersion.ToString(); if (myOS.Contains("NT 5.1")) Console.WriteLine("İşletim Sisteminiz Windows sistemi XP"); else if (myOS.Contains("NT 6.1")) Console.WriteLine("Sizin işletim sistemi Windows 7"); Console.ReadLine(); )) )

C#'da dizi karşılaştırması hakkında biraz

Tüm karakter dizisi işleme operasyonları arasında, muhtemelen bir diziyi diğeriyle karşılaştırması en sık yapılanıdır. Dize karşılaştırma yöntemlerinden herhangi birine bakmadan önce aşağıdakilerin vurgulanması gerekir: .NET Framework'te dize karşılaştırması iki ana yolla yapılabilir:

    İlk olarak, karşılaştırma, genellikle bir program yürütüldüğünde etkili olan kültürel ortamlar olan belirli bir kültürel ortamın geleneklerini ve normlarını yansıtabilir. Bu, tümü olmasa da bazı karşılaştırma yöntemleri için standart davranıştır.

    İkinci olarak, kültürel ortam ayarlarından bağımsız olarak sadece diziyi oluşturan karakterlerin sıra değerleri üzerinde karşılaştırma yapılabilir. Genel olarak konuşursak, dizilerin kültürel olarak duyarsız karşılaştırması, bir dizinin başka bir diziden daha büyük, daha küçük veya ona eşit olup olmadığını belirlemek için sözlükbilimsel sıralamayı (ve dil özelliklerini) kullanır. Sıralı karşılaştırmada, dizeler her karakterin değiştirilmemiş değerine göre basitçe sıralanır.

Kültürler ve sıralı karşılaştırmalar arasında dizelerin nasıl karşılaştırıldığına ilişkin farklılıklar ve bu tür karşılaştırmaların her birinin sonuçları nedeniyle, şu anda Microsoft tarafından sunulan en iyi uygulamaları kullanmanızı şiddetle öneririz. Sonuçta, dizeleri karşılaştırmanın yanlış yolunu seçmek, programın geliştirildiği ortamdan farklı bir ortamda çalıştırıldığında yanlış çalışmasına neden olabilir.

Karakter dizilerinin nasıl karşılaştırılacağını seçmek çok önemli bir karardır. Genel bir kural olarak ve istisnasız olarak, sonucu kullanıcıya göstermek (örneğin, sözlük sırasına göre sıralanmış bir dizi diziyi görüntülemek için) amaçlıysa, kültürel açıdan hassas bir dize karşılaştırması seçmelisiniz. Ancak dizeler, dosya adı gibi kültürel farklılıklar nedeniyle değiştirilmesi amaçlanmayan sabit bilgiler içeriyorsa, anahtar kelime, bir web sitesi adresi veya güvenlikle ilgili bir değer varsa, sıralı bir dize karşılaştırması seçmelisiniz. Elbette, geliştirilmekte olan belirli uygulamanın özellikleri, karakter dizilerini karşılaştırmak için uygun bir yol seçimini belirleyecektir.

String sınıfı, yukarıdaki tabloda listelenen çeşitli dize karşılaştırma yöntemleri sağlar. Aralarında en çok yönlü olan, Compare() yöntemidir. Type parametresi tarafından belirlenen bir karşılaştırma yöntemiyle, büyük/küçük harfe duyarlı veya büyük/küçük harfe duyarlı olmayan iki dizeyi tamamen veya kısmen karşılaştırmanıza olanak tanır. DizeKarşılaştırma tür parametresi tarafından sağlanan kültürel bilgilerin yanı sıra KültürBilgisi.

StringComparison türünde bir parametre içermeyen Compare() yönteminin aşırı yüklemeleri, karakter dizelerinin büyük/küçük harfe ve kültüre duyarlı karşılaştırmasını gerçekleştirir. Ve CultureInfo türünde bir parametre içermeyen aşırı yüklenmiş varyantlarda, kültür bilgileri geçerli çalışma zamanı ortamı tarafından belirlenir.

StringComparison türü, aşağıdaki tabloda gösterilen değerleri tanımlayan bir numaralandırmadır. Bu değerleri kullanarak, uygulamanızın ihtiyaçlarına uygun dize karşılaştırmaları düzenleyebilirsiniz. Bu nedenle, bir StringComparison türü parametresi eklemek, Compare() yönteminin ve Equals() gibi diğer karşılaştırma yöntemlerinin yeteneklerini genişletir. Ayrıca, dizelerin nasıl karşılaştırılacağını açık bir şekilde belirtmeyi de mümkün kılar.

Kültürel olarak hassas dizi karşılaştırmaları ile sıralı karşılaştırmalar arasındaki farklar nedeniyle, bu konuda mümkün olduğunca kesin olmak önemlidir.

StringComparison enum'da tanımlanan değerler
Anlam Tanım
GeçerliKültür Geçerli kültür ayarları kullanılarak dize karşılaştırması yapılır
CurrentCultureIgnoreCase Dize karşılaştırması, geçerli kültür ayarları kullanılarak gerçekleştirilir, ancak büyük/küçük harfe duyarlı değildir
Değişmez Kültür Dize karşılaştırması, değişmez olanlar kullanılarak yapılır, yani. kültürel çevre hakkında evrensel veriler
InvariantCultureIgnoreCase Dize karşılaştırması, değişmez olanlar kullanılarak yapılır, yani. evrensel kültürel veriler ve büyük/küçük harfe duyarsız
sıra Dize karşılaştırması, dizedeki karakterlerin sıra değerleri kullanılarak gerçekleştirilir. Bu durumda, sözlük düzeni ihlal edilebilir ve sözleşmeler Belirli bir kültürel çevrede kabul edilenler göz ardı edilir
OrdinalIgnoreCase Dize karşılaştırması, dizedeki karakterlerin sıra değerleri kullanılarak gerçekleştirilir, ancak büyük/küçük harfe duyarlı değildir

Her iki durumda da, karşılaştırılan ilk dize ikinciden küçükse, Compare() yöntemi negatif bir değer döndürür; karşılaştırılan ilk dize ikinciden büyükse pozitif bir değer; ve son olarak, karşılaştırılan her iki dize de eşitse sıfırdır. Karşılaştırılan dizeler eşitse Compare() yöntemi sıfır döndürse de, karakter dizelerinin eşit olup olmadığını belirlemek için Equals() yöntemini veya == operatörünü kullanmak genellikle daha iyidir.

Gerçek şu ki, Compare() yöntemi, karşılaştırılan dizelerin eşitliğini sıralama düzenine göre belirler. Örneğin, diziler kültürel olarak karşılaştırılırsa, her iki dizi de sıralama düzeninde aynı olabilir, ancak özünde eşit olmayabilir. Varsayılan olarak, dize eşitliği, kültürel olarak değil, karakterlerin sıra değerlerine göre Equals() yönteminde belirlenir. Bu nedenle, varsayılan olarak, her iki dize de bu yöntemde, == operatöründe nasıl yapıldığına benzer şekilde, mutlak, karakter karakter eşitlik için karşılaştırılır.

Karşılaştırma() yönteminin çok yönlülüğüne rağmen, karakter dizelerinin basit bir sıralı karşılaştırması için, CompareOrdinal() yöntemini kullanmak daha kolaydır. Son olarak, CompareTo() yönteminin yalnızca dizeleri kültürel açıdan duyarlı bir şekilde karşılaştırdığını unutmayın.

Aşağıdaki program, karakter dizilerini karşılaştırmak için Compare(), Equals(), CompareOrdinal() yöntemlerinin ve == ve != operatörlerinin kullanımını gösterir. İlk iki karşılaştırma örneğinin, kültürel olarak hassas dizi karşılaştırmaları ile İngilizce sıralı karşılaştırmalar arasındaki farkları açıkça gösterdiğine dikkat edin:

Sistemi Kullanmak; sınıf Örnek ( static void Main() ( string str1 = "alpha"; string str2 = "Alpha"; string str3 = "Beta"; string str4 = "alpha"; string str5 = "alpha, beta"; int sonuç; / / Önce, kültüre duyarlı dize karşılaştırması ile sıralı karşılaştırma arasındaki farkı gösterin sonuç = String.Compare(str1, str2, StringComparison.CurrentCulture); Console.Write("Kültüre duyarlı dize karşılaştırması: "); if (sonuç 0 ) Konsol .WriteLine(str1 + ", " + str2'den büyüktür; yoksa Console.WriteLine(str1 + "is " + str2); sonuç = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write("Sıralı karşılaştırma satırlar: "); if (sonuç 0) Console.WriteLine(str1 + ", " + str2'den büyükse); else Console.WriteLine(str1 + ", " + str4'e eşittir); // CompareOrdinal() yönteminin sonucunu kullanın = String.CompareOrdinal(str1, str2); Console.Write("Dizeleri CompareOrdinal() kullanarak karşılaştırın:\n"); if (sonuç 0) Console.WriteLine(str1 + ", " + str2'den büyük); else Console.WriteLine (str 1 + "eşittir" + str4); Console.WriteLine(); // == operatörünü kullanarak dize eşitliğini belirleyin // Bu, karakter dizelerinin sıralı bir karşılaştırmasıdır if (str1 == str4) Console.WriteLine(str1 + " == " + str4); // != operatörünü kullanarak satır eşitsizliğini tespit et if(str1 != str3) Console.WriteLine(str1 + " != " + str3); if(str1 != str2) Console.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Equals() yöntemini kullanarak sıralı büyük/küçük harfe duyarlı olmayan bir dize karşılaştırması gerçekleştir if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Equals() yöntemini kullanarak dizeleri " + "parametresiyle karşılaştırma OrdinalIgnoreCase: \n" + str1 + ", " + str2'ye eşittir); Console.WriteLine(); // Dizelerin bölümlerini karşılaştır if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Dizeleri geçerli kültüre göre karşılaştırın:" + "\n3 ilk karakter " + str2 + " dizesinin değeri, " + str5) dizesinin ilk 3 karakterinden büyük; )) )

Bu programı çalıştırmak aşağıdaki sonucu verir:

C dilinde ayrı bir "karakter dizisi" veri türü yoktur. Dizelerle çalışma, char türündeki tek boyutlu diziler, yani. karakter dizisi, boş bir bayt ile sonlandırılan tek boyutlu bir karakter dizisidir.

Boş bayt, her biti sıfıra eşit olan bir bayttır ve boş bayt için ´\0' karakter sabiti (bir satır sonlandırıcı veya boş sonlandırıcı) tanımlanır. Bu nedenle, bir dizenin k karakter içermesi gerekiyorsa, dizi açıklamasında k+1 öğeleri belirtilmelidir.

Örneğin, karakter a; - dizenin altı karakter içerebileceği ve son baytın sıfır için ayrıldığı anlamına gelir.

Bir dize sabiti, içine alınmış bir dizi karakterdir. ikili alıntı. Örneğin:

char S="Dizelerle çalışma";

Bir dize sabitinin sonunda '\0' karakterini açıkça belirtmeye gerek yoktur.

Dizelerle çalışırken işaretçiler kullanmak uygundur, örneğin:

x = "BSUIR";

x = (i>0)? "olumlu" :(<0)? "отрицательное":"нулевое";

Dizeleri girmek için yaygın olarak iki standart işlevin kullanıldığını hatırlayın:

tarama()- girdi belirteci ile dize değişkenleri için değerleri tanıtır %s ilk "boşluk" karakterinin görünmesinden önce ("&" karakterinin dize veri kimliğinden önce belirtilmesi gerekmez);

alır()- ENTER tuşuna basılarak bu satırın içine boşluk bırakılarak satır girilir.

Her iki işlev de dizeyi otomatik olarak boş bir bayt ile sonlandırır.

İlk boş bayta ('\0') kadar olan satırlar printf() veya puts() işlevleri tarafından çıkarılır:

yazdır()çıktıdan sonra imleci yeni satırın başına taşımaz;

koyar() dize bilgisi çıktısından sonra imleci otomatik olarak yeni bir satırın başına taşır.

Örneğin:

printf("Boşluksuz bir dizi giriniz: \n");

scanf("%s",Str);

puts("Bir dizi giriniz");

Dizeler üzerinde kalan işlemler, prototipleri dosyada açıklanan standart kitaplık işlevleri kullanılarak gerçekleştirilir. dize.h. En sık kullanılan fonksiyonlara bir göz atalım.

int işlevi strlen(char *S), sonlandırıcı boş baytı yok sayarak dizenin uzunluğunu (dizedeki karakter sayısı) döndürür.

char *S1=”Minsk!\0”, S2=”BSUIR-Yaşasın!”;

printf(“ %d, %d .”, strlen(S1), strlen(S2));

Programın bu bölümünün sonucu:

int işlevi strcpy(char *S1, char *S2) - S2 dizisinin içeriğini S1 dizisine kopyalar.

İşlev sokak kedisi(char *S1, char *S2) - S2 dizesini S1 dizisine birleştirir ve onu S2 dizisi değişmezken S1 dizisinin olduğu diziye yerleştirir. S1 dizesini sonlandıran boş bayt, S2 dizesinin ilk karakteriyle değiştirilir.

int işlevi strcmp(char *S1, char *S2), S1 ve S2 dizelerini karşılaştırır ve değeri döndürür<0, если S10 ise S1>S2; =0 dizeler eşitse, yani aynı sayıda özdeş karakter içerir.

S dizesini sayıya dönüştürmek için işlevler:

tamsayı: int atoi(karakter*S);

Uzun Tam Sayı: uzun atol(karakter*S);

gerçek: çift At(karakter*S);

hata durumunda, bu işlevler 0 döndürür.

V sayısını bir S dizisine dönüştürmek için işlevler.

»Güvenilir SEO Ajansı Hindistan Küçük İşletmelerin Gelirlerini Artırabilir

Kullanıcıların %80'i satın alma yapmadan önce Google'da ve diğer arama motorlarında arama yapıyor ve arama motorları aracılığıyla oluşturulan %50'den fazla sorgu dönüştürülür. Bu iki istatistik, Arama Motoru Optimizasyonunun önemini kanıtlıyor. Açıkça bir noktaya değinen pek çok istatistik ve gerçek var: herhangi bir küçük, orta veya büyük ölçekli işletme profesyonel SEO hizmetlerine ihtiyaç duyar. Küçük işletmeler ve yeni başlayanlar genellikle bütçe sorunlarıyla karşı karşıyadır. Gelirlerini artırmak için bütçelerinde en iyi SEO hizmetini almak için Hindistan'dan herhangi bir güvenilir SEO ajansından yardım alabilirler.
Arama, tüketicilerin zihninde büyük bir etkiye sahiptir. Büyük arama motoru optimizasyonu uzmanları tarafından Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot vb. gibi çeşitli yetkili web sitelerinde paylaşılan çeşitli istatistiklere göre. SEO, olası satışların çoğunu yakalar. Ayrıca, organik arama sonuçlarından gelen potansiyel müşteriler daha yüksek bir dönüşüm oranına sahiptir. Bu istatistikler ve tüketici davranışları, en iyi SEO hizmetinin bir lüks değil, herhangi bir işletme için bir gereklilik olduğunu daha net bir şekilde ortaya koymaktadır.
Rekabeti atlatmak ve iş büyümesini artırmak için her kuruluşun Arama Motoru Optimizasyonu hizmetlerini kullanması gerekir. Büyük markalar, üst düzey bir SEO şirketi veya bir SEO uzmanı tarafından sunulan uzman SEO hizmeti için yeterli parayı yatırabilir, ancak küçük işletme sahipleri genellikle daha az bütçe nedeniyle bu hizmetin kalitesinden ödün verir. Küçük işletmelerin ve yeni başlayanların, profesyonel SEO hizmetiyle yaratılabilecek fırsatları bırakması veya olumlu sonuç vermeyen ucuz bir SEO hizmeti kullanması zor bir gerçektir.
Küçük işletme sahipleri ve yeni başlayanlar, sınırlı bütçeyle bile profesyonel SEO hizmetlerinden yararlanabilir. En iyi çözüm, Hindistan merkezli güvenilir bir SEO şirketi bulmaktır. Hindistan'da dijital pazarlama ajansıyla çalışan ve sektördeki en iyi hizmetleri sunan birçok SEO uzmanı var. Bütçeniz dahilinde size gerekli SEO hizmetlerini sağlayabilirler. Ücretler, daha düşük oranlarda daha iyi hizmet almak için bir SEO ajansı Hindistan ile müzakere edilebilir. Ancak, daha az ücret alan ve uzmanlık kendi maliyetiyle geldiğinden daha fazlasını vermeyi vaat eden ucuz SEO hizmetine kanmayın. İşletmeniz için bir şirketle sözleşme yapmadan önce portföyü görmeli veya uygun soruları sormalısınız.
Hindistan'daki SEO uzmanları, arama motoru optimizasyonunun en iyi uygulamaları konusunda yeteneklidir. Ayrıca, Hindistan'da, belirtilen bütçedeki bir işletme için en iyi arama motoru optimizasyonu stratejisini oluşturma konusunda uzmanlaşmış Ash Vyas gibi bazı SEO uzmanları vardır. SEO uzmanları net bir plan oluşturacak ve beklenen sonuçların neler olabileceğini de paylaşacaklar. Bu şekilde yatırımınızın ve getirilerinizin farkında olabilirsiniz. Bu, daha iyi bir iş kararı verilmesine yardımcı olur.
Hindistan'dan en iyi SEO hizmetlerini mümkün olan en kısa sürede sunan güvenilir bir SEO şirketi bulmak ve sözleşme yapmak iyi bir fikirdir. Web Sayfalarınızı dizine almaya ve arama motorlarında anahtar kelimelerinizi artırmaya başlamak için küçük bir bütçe ve sınırlı faaliyetlerle de başlayabilirsiniz. En iyi SEO hizmetlerine yatırım yapmak için binlerce dolarınızın olacağı mükemmel zamanı veya günü beklemeyin. Erken başlamak, pazarlama yaklaşımınızla agresifleşebileceğiniz zaman daha hızlı sonuç almanıza yardımcı olacaktır. Hindistan merkezli güvenilir bir SEO şirketi, iyi sonuçlar elde etmek için mevcut ve gelecekteki planlarınızı tanımlamanıza yardımcı olacaktır. Daha fazla dizine eklenmiş sayfa, sürekli profesyonel SEO uygulamaları ile yapılan işletmenizin sıralamalarını ve güvenilir markasını artıracak, sorguları, işleri ve gelirleri ikiye katlayacaktır. Herhangi bir küçük işletme, profesyonel SEO hizmetlerine iki haneli yatırımla başlayabilir. Hindistan'da düşük bütçeli ancak odaklı Arama Motoru Optimizasyonu hizmetlerinden kaynaklanan birçok SEO ajansı var.

sürgünden anketler

  • CraigWew

    12.04.2018

    »Gayrimenkul ve Genel Satışlarda Müşteri İle İlişki Kurmanın Önemi

    Müşteri ile ilişki kurmanın önemi.
    Bir müşteriyle yakınlık kurmak kazanılmalı ve satış sürecinin ayrılmaz bir parçası olarak ele alınmalıdır.
    Bir müşteriyle kendiniz arasında gerçek bir bire bir ilişki kurmak için iki şey gerekir!
    İlk önce, farkında olmanız ve orada olmanız gerekecek! İkincisi, bu süreçte gerçekleşecek iki farklı aşama olduğunu anlamalısınız.
    A-Orada ol-bu ne anlama geliyor?
    o Çoğu insan konuşurken başka birini gerçekten dinlemez. Genellikle bir sonraki cevaplarını veya ifadelerini formüle etmekle o kadar meşguller ki, muhtemelen gerçekten dinleyemezler.
    o Kulağa hoş geliyorsa, orada olmak kapa çeneni ve dinle!
    B-İlk veya ilk aşama nedir?
    o Genel olarak, kendinizi müşterilerin zihninde anlaşmak istedikleri biri olarak yerleştirmek için sadece birkaç dakikanız vardır.
    o Şüpheye düştüğünüzde, önce onları ortaya çıkaracak sorular sormak ve kendilerinden bahsetmek en iyisidir.
    o Bir profesyonel olarak görünmek de her zaman güvenlidir - sabırlı veya kuru değil, ne yaptığını bilen, konuşan ve rol yapan birisini kastettim.
    C-Diğer aşamalar
    o Zaman geçtikçe sohbetler ve onların soracağı sorularla yeteneğinizi ya kuracaksınız ya da kuramayacaksınız.
    o Muhtemelen bir süre sizi ölçeceklerinin farkında olun. İyi haber şu ki, bir noktada, eğer ilişki kurmada başarılı olduysanız, onlar rahatlayacak ve ikiniz de evi bulmaya veya satmaya odaklanabilirsiniz.
    Uyum geliştirmeme başka ne yardımcı olabilir?
    o Farklı kişilik tiplerini anlamaya çalışarak ve ardından doğru soruları söyleyip sorarak.
    o İyi bir uyumunuz varsa (müşteri ile aynı dalga boyunda olun) o zaman satış temelde sona ermiştir, şimdi sadece doğru evi bulmak veya liste belgelerini doldurmak meselesidir.
    Peki ya farklı kişilikler
    o Bu bir psikiyatri kitabı olmadığından, şimdilik sadece iki ana türü anlayın.
    o İçe dönük ve dışa dönük insanlar vardır.
    o Türü biliyorsun. Her sınıflandırmaya uyan tanıdığınız üç kişiyi düşünün.
    Peki ya beden dili ve konuşma kalıpları?
    o Hızlı veya yavaş konuşuyorlarsa, onların konuşma kalıplarını taklit etmeye çalışın.
    o Yüksek veya alçak sesle konuşuyorlarsa, aynısını yapın. Öne mi arkaya mı eğiliyorlar?
    o Bu konuda yazılmış pek çok kitap olduğunu söylemeye gerek yok. Bunun önemli bir faktör olduğunu unutmayın - özellikle bir konferans odasında otururken veya birinin evinde 400.000 dolarlık bir anlaşmayı tartışırken.
    Uyum geliştirmek, öğrenilebilen ve geliştirilebilen bir beceridir.
    o Hepimiz bize bir şeyler satan bir satış elemanı deneyimlemişizdir, ancak yine de satıldığımızı hissetmedik. Sebebi ise, güvendiğiniz yerde sizi rahat hissettirmesidir.
    İlişkiyi nasıl geliştiririz?
    o Gözlerinizi ve kulaklarınızı kullanın ve sorular sorun. açıklamak
    o Gözleri kullanın:
    o Elbiselerine - arabalarına - kişisel eşyalarına bakın ve gerçekten onlara bakın ve onlar hakkında size ne söylediğini deşifre edin.
    o Kulakları kullanın:
    o Gerçek MOTİVASYONLARININ dibine ulaşmak için ne dediklerini dinleyin ve sorular sorun!
    Şimdi tüm bu konuşma sırasında, muhtemelen onlarla ortak noktanız olduğunu keşfedeceğiniz bir veya iki şey olacak. (Aile, coğrafi alanlar, balık tutma vb.) Ortak bir paydaya rastladığınızda, aşina olduğunuzu onlara bildirin ve ardından bir dakikanızı ayırarak onlarla tartışın.
    Hedef nedir?
    o Sizi onlardan biri olarak kabul ettiklerinde, şimdi birlikte ve sonra bir ekip olarak çalıştığınız için satışta gerçekten harika bir deneyime sahip olacaksınız - artık satıcı değilsiniz, şu anda danışman konumundasınız .
    o Unutmayın, müşteri sizin dünyasına girmenize ya izin verir ya da vermez. Bunu anlarsanız ve onunla empati kurmak için gerçekten çok çalışırsanız, bir güven pozisyonu kazanabilirsiniz. Çoğu durumda, yoldayken bu olduğunda gerçekten rahatladıklarını (beden dili) göreceksiniz.
    o Bunu göstermek için, hiç bir konuşma yaptınız ve sonunda bir dinleyiciyle bağlantı kurduğunuzda, onların onaylayarak başlarını sallayacaklarını fark ettiniz mi? Bunların hepsi sıradan görünebilir ama değiller.
    Kapanışta, bir müşterinin güvenini kazanabilirseniz, bir ürün veya hizmet satmak çok daha kolaydır ve deneyim katılan herkes için zevkli olabilir.
    Her zaman bir Kazan/Kazan'ın en iyi durum olduğunu unutmayın.

Modern C++ standardı, dizelerle çalışmayı düzenlemek için işlevler ve özellikler (değişkenler) içeren bir sınıf tanımlar (klasik C dilinde böyle dizeler yoktur, yalnızca karakter dizileri vardır):

#Dahil etmek

#Dahil etmek

#Dahil etmek

Dizelerle çalışmak için standart bir ad alanı da eklemeniz gerekir:

Ad alanı std'yi kullanma;

Aksi takdirde, her yerde string yerine std::string sınıf tanımlayıcısını belirtmeniz gerekecektir.

Aşağıda, dize ile çalışan bir program örneği verilmiştir (eski C uyumlu derleyicilerde çalışmaz!):

#Dahil etmek #Dahil etmek #Dahil etmek ad alanı std kullanarak; int main() (string s = "Test"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->sil(s2->end()); cout<< s2->c_str(); cin.get(); 0 döndür; )

string sınıfının sahip olduğu temel özellikler:

  • bir dizi karakterle (yerleşik bir dize) veya string türünde başka bir nesneyle başlatma. Yerleşik tip ikinci yeteneğe sahip değildir;
  • bir satırı diğerine kopyalamak. Yerleşik bir tür için strcpy() işlevini kullanmanız gerekir;
  • okuma ve yazma için bir dizenin tek tek karakterlerine erişim. Yerleşik dizide bu, indeks işlemi kullanılarak veya bir işaretçi kullanılarak dolaylı adresleme kullanılarak yapılır;
  • eşitlik için iki dizeyi karşılaştırmak. Yerleşik bir tür için strcmp() ailesinin işlevleri kullanılır;
  • iki dizenin bitiştirilmesi (birleştirilmesi), sonucu ya üçüncü bir dize olarak ya da orijinal olanlardan biri yerine verir. Yerleşik bir tür için strcat() işlevi kullanılır, ancak sonucu yeni bir satırda almak için strcpy() ve strcat() işlevlerini sırayla kullanmanız ve ayrıca bellek tahsisine dikkat etmeniz gerekir;
  • bir dizgenin uzunluğunu belirlemek için yerleşik araçlar (size() ve l ength() sınıfının üye işlevleri). Yerleşik bir tür dizenin uzunluğunu bulmanın tek yolu, onu strlen() işleviyle hesaplamaktır;
  • bir dizenin boş olup olmadığını bulma yeteneği.

Bu temel özelliklere daha yakından bakalım.

dize başlatma tarif ederken ve IP uzunluğu(sonlandırıcı boş sonlandırıcı dahil değil):

String st("Benim dizim\n"); cout<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";

Dize ayrıca boş olabilir:

dize st2;

olup olmadığını kontrol etmek için dize boş mu, uzunluğunu 0 ile karşılaştırabilirsiniz:

if (!st.size()) // boş

veya boş bir dize için true ve boş olmayan bir dize için false döndüren empty() yöntemini kullanın:

if (st.empty()) // boş

Dize oluşturmanın üçüncü biçimi, dize türünde bir nesneyi aynı türde başka bir nesneyle başlatır:

dize st3(st);

st3 dizesi, st dizesiyle başlatılır. bunların olduğundan nasıl emin olabiliriz dizeler eşleşiyor? Karşılaştırma operatörünü kullanalım (==):

if (st == st3) // başlatma başarılı

Nasıl bir satırı diğerine kopyala? Her zamanki atama operatörü ile:

st2 = st3; // st3'ü st2'ye kopyala

İçin dize birleştirme toplama operatörü (+) veya toplama-atama operatörü (+=) kullanılır. İki satır verilsin:

s1("merhaba,"); string s2("dünya\n");

İlk ikisinin birleşiminden oluşan üçüncü bir dize alabiliriz, böylece:

Dizi s3 = s1 + s2;

s1'in sonuna s2 eklemek istiyorsak şunu yazmalıyız:

S1 += s2;

Ekleme işlemi, sınıf nesnelerini birleştirebilir sicim sadece kendi aralarında değil, aynı zamanda yerleşik tipteki dizelerle de. Özel karakterlerin ve noktalama işaretlerinin yerleşik char * türüyle ve önemli sözcüklerin sınıf dizesi nesneleri tarafından temsil edilmesi için yukarıdaki örneği yeniden yazabilirsiniz:

Sabit karakter *pc = ", "; string s1("merhaba"); string s2("dünya"); string s3 = s1 + bilgisayar + s2 + "\n"; cout<< endl << s3;

Bu tür ifadeler işe yarar çünkü derleyici yerleşik türdeki nesneleri otomatik olarak string sınıfındaki nesnelere nasıl dönüştüreceğini "bilir". Bir dize nesnesine yerleşik bir dize atamak da mümkündür:

dize s1; const char *pc = "bir karakter dizisi"; s1=bilgisayar; // Sağ

Ters dönüşüm ise çalışmıyor. Aşağıdaki yerleşik tür dize başlatmayı gerçekleştirmeye çalışmak derleme hatasına neden olur:

Karakter*str = s1; // Derleme Hatası

Bu dönüştürmeyi yapmak için, c_str() ("C string") adlı üye işlevini açıkça çağırmalısınız:

Const karakter *str = s1.c_str();

c_str() işlevi, yerleşik dize türünde olduğu gibi, dize nesnesinin dizesini içeren bir karakter dizisine bir işaretçi döndürür. Buradaki const anahtar sözcüğü, modern görsel ortamlarda bir nesnenin içeriğini bir işaretçi aracılığıyla doğrudan değiştirmenin "tehlikeli" olasılığını engeller.

İle bireysel karakterler yerleşik tür gibi string türünde bir nesneye dizin işlemi kullanılarak erişilebilir. Örneğin, tüm noktaları alt çizgilerle değiştiren bir kod parçası:

String str("www.disney.com"); int boyut = str.size(); for (int ben = 0; ben< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Replace(str.begin(), str.end(), ".", "_");

Doğru, burada kullanılan string sınıfının replace yöntemi değil, aynı adı taşıyan algoritmadır:

#Dahil etmek

Dize nesnesi bir kap gibi davrandığından, ona başka algoritmalar uygulanabilir. Bu, dize sınıfının işlevleri tarafından doğrudan çözülmeyen sorunları çözmenize olanak tanır.

Aşağıda, dize sınıfının ana operatörlerinin ve işlevlerinin kısa bir açıklaması yer almaktadır, tablodaki bağlantılar İnternet'teki Rusça açıklamalara yönlendirmektedir. string sınıfının yeteneklerinin daha eksiksiz bir listesi için, örneğin Wikipedia veya cplusplus.com'a bakın.

Bir dizede karakter belirtme

operatör=

bir dizeye değerler atar

atamak

bir dizeye karakter atar

Tek tek karakterlere erişme

de

sınırların dışında dizini kontrol ederek belirtilen karakteri alma

Şebeke

belirtilen karakteri alma

ön

ilk karakteri almak

geri

son karakteri almak

veri

bir dizgenin ilk karakterine bir işaretçi döndürür

c_str

İadeler değiştirilemez Dizenin karakterlerini içeren C karakter dizisi

Dizi kapasitesini kontrol etme

boş

bir dizgenin boş olup olmadığını kontrol eder

boyut
uzunluk

bir dizedeki karakter sayısını döndürür

max_size

maksimum karakter sayısını döndürür

rezerv

depolama alanı ayırır

Bir dizideki işlemler

açık

dizenin içeriğini temizler

sokmak

karakter ekleme

silmek

karakter kaldırma

Geri itmek

bir dizenin sonuna bir karakter ekleme

pop_back

son karakteri kaldırır

eklemek

operatör+=

bir dizenin sonuna karakter ekler

karşılaştırmak

iki dizeyi karşılaştırır

yer değiştirmek

belirtilen karakterin her oluşumunu değiştirir

alt dizi

bir alt dize döndürür

kopyalamak

karakterleri kopyalar

yeniden boyutlandırmak

saklanan karakter sayısını değiştirir

Teller. Hat girişi/çıkışı. Biçimlendirilmiş G/Ç. Standart C dili işlevlerini kullanarak dize işleme.Bellekle çalışma.

1.1. Dizeleri bildirme ve başlatma.

Bir dize, boş karakter '\0' ile biten bir karakter dizisidir. Bir dize, normal bir karakter dizisi olarak bildirilir, örneğin,

karakter s1; // dokuz karakter uzunluğunda dize

karakter*s2; // dizgeye işaretçi

s1 ve s2 işaretçileri arasındaki fark, s1 işaretçisinin adlandırılmış bir sabit, s2 işaretçisinin bir değişken olmasıdır.

Dize sabitleri, tek tırnak içine alınan karakterlerden farklı olarak çift tırnak içine alınır. Örneğin,

"Bu bir dize."

Bir dize sabitinin uzunluğu, standarda göre 509 karakteri aşamaz. Ancak, birçok uygulama daha uzun dizelere izin verir.

Dizeleri başlatırken, dizinin boyutunu belirtmemek daha iyidir; derleyici bunu dizenin uzunluğunu sayarak ve ona bir ekleyerek yapacaktır. Örneğin,

char s1 = “Bu bir dizedir.”;

C programlama dilinde, prototipleri stdlib.h ve string.h başlık dosyalarında açıklanan dizelerle çalışmak için çok sayıda işlev vardır. Bu işlevlerle çalışmak aşağıdaki paragraflarda tartışılacaktır.

1.2. Hat girişi/çıkışı.

Konsoldan bir dize girmek için işlevi kullanın

char* alır(char*str);

str adresine bir dize yazar ve giriş dizesinin adresini döndürür. İşlev, '\n' veya EOF (dosya sonu) karakteriyle karşılaşırsa girişi durdurur. Yeni satır karakteri kopyalanmaz. Okuma satırının sonuna boş bir bayt yerleştirilir. Başarı durumunda, işlev okuma satırına bir işaretçi ve başarısızlık durumunda NULL döndürür.

Konsola bir dize çıktısı almak için standart işlevi kullanın

int koyar (const char *s);

bu, başarı durumunda negatif olmayan bir sayı ve başarısızlık durumunda EOF döndürür.

get ve puts fonksiyon prototipleri stdio.h başlık dosyasında açıklanmıştır.

#Dahil etmek

printf("Giriş Dizesi: ");

1.3. Biçimlendirilmiş G/Ç.

Konsoldan biçimlendirilmiş giriş için işlevi kullanın

int scanf (const char *biçimi, ...);

bu, başarı durumunda okunan veri birimlerinin sayısını ve başarısızlık durumunda EOF'yi döndürür. format parametresi, giriş formatı belirtimlerini içeren bir format dizesine işaret etmelidir. Biçim dizesinden sonra gelen argümanların sayısı ve türleri, biçim dizesinde belirtilen giriş biçimlerinin sayısı ve türleri ile eşleşmelidir. Bu koşul karşılanmazsa, işlevin sonucu tahmin edilemez.

Biçim dizesindeki boşluk, "\t" veya "\n" karakterleri, giriş akışında şu karakterleri içeren bir veya daha fazla boş karakteri tanımlar: boşluk, '\t', '\n', '\v', '\f'. scanf işlevi, giriş akışındaki boş karakterleri atlar.

% karakteri dışında, bir biçim dizesindeki değişmez karakterler, giriş akışında tam olarak aynı karakterlerin görünmesini gerektirir. Böyle bir karakter yoksa, scanf girişi durdurur. scanf işlevi, değişmez karakterleri atlar.

Genel olarak, giriş biçimi belirtimi şöyledir:

%[*] [genişlik] [değiştiriciler] tür

'*' karakteri, bu belirtim tarafından tanımlanan bir alana girerken bir boşluğu belirtir;

- 'genişlik', bu belirtim tarafından girilen maksimum karakter sayısını tanımlar;

Tür aşağıdaki değerleri alabilir:

c bir karakter dizisidir,

s – karakter dizisi, diziler boş karakterlerle ayrılır,

d, 10 s/s'de işaretli bir tamsayıdır,

i işaretli bir tamsayıdır, sayı sistemi ilk iki basamağa dayanmaktadır,

u, 10 s/s'de işaretsiz bir tamsayıdır,

o, 8 s/s cinsinden işaretsiz bir tamsayıdır,

x, X, 16 s/s'de işaretsiz bir tamsayıdır,

e, E, f, g, G - kayan sayı,

p, bir işaretçinin işaretçisidir,

n bir tamsayı için bir işaretçidir,

[…] bir dizi taranan karakterdir, örneğin .

İkinci durumda, giriş akışından yalnızca köşeli parantez içindeki karakterler girilecektir. Köşeli parantez içindeki ilk karakter '^' ise, yalnızca diziye dahil olmayan karakterler girilir. Bir dizideki karakter aralığı '-' karakteri ile belirtilir. Karakterler girildiğinde, baştaki boş karakterler ve dizenin sonlanan boş baytı da girilir.

Değiştiriciler aşağıdaki değerleri alabilir:

h kısa bir tamsayıdır,

l, L - uzun tamsayı veya kayan nokta,

ve yalnızca tamsayılar veya kayan değerler için kullanılır.

Aşağıdaki örnek, scanf işlevi için kullanım durumlarını gösterir. Kayan bir sayı girmeden önce biçim belirtecinin önünde bir boşluk olduğuna dikkat edin.

#Dahil etmek

printf("Bir tamsayı giriniz: ");

scanf("%d",&n);

printf("Bir çift giriniz: ");

scanf(" %lf",&d);

printf("Bir karakter giriniz: ");

scanf(" %c", &c);

printf("Bir dizi giriniz: ");

scanf("%s", &s);

Bu programda kayan noktalı sayının başlatıldığına dikkat edin. Bu, derleyicinin kayan sayılarla çalışmayı destekleyecek bir kitaplık içermesi için yapılır. Bu yapılmazsa, kayan bir sayı girilirken çalışma zamanında bir hata oluşacaktır.

Konsola biçimlendirilmiş çıktı için işlevi kullanın

int printf (const char *biçim, ...);

bu, başarı durumunda çıktı birimlerinin sayısını ve başarısızlık durumunda EOF'yi döndürür. format parametresi, çıktı formatı özelliklerini içeren bir format dizesidir. Biçim dizesini izleyen argümanların sayısı ve türleri, biçim dizesinde verilen çıktı biçimi belirtimlerinin sayısı ve türleri ile eşleşmelidir. Genel olarak, çıktı biçimi belirtimi şöyledir:

%[flags] [width] [.precision] [değiştiriciler] tür

- 'bayraklar' çıktı biçimini belirten çeşitli sembollerdir;

- 'genişlik', bu belirtim tarafından çıkarılan minimum karakter sayısını tanımlar;

- ".precision" çıktısı alınacak maksimum karakter sayısını tanımlar;

- 'değiştiriciler' argümanların türünü belirtir;

- 'type', argümanın türünü belirtir.

İşaretli tam sayıları yazdırmak için aşağıdaki çıktı biçimi kullanılır:

%[-] [+ | boşluk] [genişlik] [l] d

- – varsayılan olarak sola hizalama – sağa;

+ - '+' işareti görüntülenir, negatif sayılar için '-' işaretinin her zaman görüntülendiğini unutmayın;

'boşluk' – karakter konumunda bir boşluk görüntülenir;

d veri türüdür int.

İşaretsiz tam sayıların çıktısını almak için aşağıdaki çıktı formatı kullanılır:

%[-] [#] [genişlik] [l]

# - 8 c/c'deki sayılar için ilk 0'ı veya 16 c/c'deki sayılar için ilk 0x veya 0X'i görüntüler,

l – uzun veri tipi değiştirici;

u, 10c/c'de bir tamsayıdır,

o 8 c/c'de bir tamsayıdır,

x, X, 16 c/c'de bir tamsayıdır.

Kayan noktalı sayıları görüntülemek için aşağıdaki çıktı biçimi kullanılır:

%[-] [+ | boşluk] [genişlik] [.hassasiyet]

"kesinlik", f, e ve E biçimleri için ondalık noktadan sonraki basamak sayısını veya g ve G biçimleri için anlamlı basamak sayısını ifade eder. Sayılar yuvarlanır. Varsayılan, altı ondalık kesinlik basamağıdır;

f sabit nokta sayısıdır,

e üstel biçimde bir sayıdır, üs "e" harfi ile gösterilir,

E, üstel biçimde bir sayıdır, üs "E" harfi ile gösterilir,

g, f veya g biçimlerinin en kısasıdır,

G, f veya G biçimlerinin en kısasıdır.

printf ("n = %d\n f = %f\n e = %e\n E = %E\n f = %.2f", -123, 12.34, 12.34, 12.34, 12.34);

// yazdırır: n = 123 f = 12.340000 e = 1.234000e+001 E = 1.234000E+001 f = 12.34

1.4. Dize biçimlendirme.

Dizeleri biçimlendirmek için tasarlanmış ve sırasıyla sscanf ve sprintf olarak adlandırılan scanf ve printf işlevlerinin çeşitleri vardır.

int sscanf (const char *str, const char *biçimi, ...);

str parametresi tarafından belirtilen dizgiden, biçim parametresi tarafından belirtilen biçim dizgisine göre veri okur. Başarı durumunda okunan veri miktarını, başarısızlık durumunda EOF miktarını döndürür. Örneğin,

#Dahil etmek

char str = "a 10 1.2 String Girdi yok";

sscanf(str, "%c %d %lf %s", &c, &n, &d, s);

printf("%c\n",c); // yazdırır: bir

printf("%d\n", n); // yazdırır: 10

printf("%f\n", d); // yazdırır: 1200000

printf("%s\n",s); // yazdırır: Dize

int sprintf (char *tampon, const karakter *biçimi, ...);

dizgiyi format parametresi tarafından belirtilen formata göre formatlar ve sonucu tampon karakter dizisine yazar. İşlev, sonlandırıcı boş bayt hariç, arabellek karakter dizisine yazılan karakter sayısını döndürür. Örneğin,

#Dahil etmek

char str = "c = %c, n = %d, d = %f, s = %s";

char s = "Bu bir dizedir.";

sprintf(arabellek, str, c, n, d, s);

printf("%s\n", arabellek); // yazdırır: c = c, n = 10, d = 1.20000, s = Bu bir dizedir

1.5. Dizeleri sayısal verilere dönüştürün.

Dizeleri sayısal verilere dönüştürmek için işlevlerin prototipleri, programa dahil edilmesi gereken stdlib.h başlık dosyasında verilmiştir.

Bir dizeyi tam sayıya dönüştürmek için işlevi kullanın

int atoi (const char *str);

karakter *str = "-123";

n = atoi(str); // n = -123

Bir dizeyi uzun bir tam sayıya dönüştürmek için işlevi kullanın

uzun int atol (const char *str);

bu, eğer başarılı olursa, dizgenin dönüştürüldüğü tamsayıyı ve başarısız olursa 0'ı döndürür.Örneğin,

karakter *str = "-123";

n = atol(str); // n = -123

Bir dizeyi çifte dönüştürmek için işlevi kullanın

çift ​​atof (const char *str);

bu, başarılı olursa, str dizesinin dönüştürüldüğü double türünde kayan bir sayı ve başarısızlık durumunda 0 döndürür. Örneğin,

karakter *str = "-123.321";

n = atof(str); // n = -123.321

Aşağıdaki işlevler, atoi, atol, atof ile benzer işlevleri yerine getirir, ancak daha fazla işlevsellik sağlar.

uzun int strtol (const char *str, char **endptr, int base);

str dizesini, döndürdüğü uzun bir int'ye dönüştürür. Bu işlevin parametreleri aşağıdaki amaca sahiptir.

Temel argüman 0 ise, dönüşüm str'nin ilk iki karakterine bağlıdır:

İlk karakter 1'den 9'a kadar bir rakamsa, sayının 10 c/c ile temsil edildiği varsayılır;

İlk karakter 0 ve ikincisi 1'den 7'ye kadar bir sayıysa, sayının 8 c/c ile temsil edildiği varsayılır;

İlk karakter 0 ve ikinci karakter 'X' veya 'x' ise, sayının 16 c/c ile temsil edildiği varsayılır.

Temel argüman 2'den 36'ya kadar bir sayıysa, bu değer sayı sisteminin temeli olarak alınır ve bu sistemin ötesine geçen herhangi bir karakter dönüştürmeyi durdurur. 11'den 36'ya kadar olan sayı sistemleri, rakamları temsil etmek için 'A' - 'Z' veya 'a' - 'z' sembollerini kullanır.

endptr argümanının değeri strtol işlevi tarafından belirlenir. Bu değer, str'nin dönüşümünü durduran karaktere bir işaretçi içerir. strtol işlevi, başarı durumunda dönüştürülen sayıyı ve başarısızlık durumunda 0'ı döndürür.

n = strtol("12a", &p, 0);

printf(" n = %ld, %dur = %c, n, *p); // n = 12, dur = bir

n = strtol("012b", &p, 0);

printf(" n = %ld, %dur = %c, n, *p); // n = 10, dur = b

n = strtol("0x12z", &p, 0);

printf(" n = %ld, %dur = %c, n, *p); // n = 18, dur = z

n = strtol("01117", &p, 0);

printf(" n = %ld, %dur = %c, n, *p); // n = 7, dur = 7

unsigned long int strtol (const char *str, char **endptr, int base);

strtol işlevine benzer şekilde çalışır, ancak bir sayının karakter temsilini işaretsiz bir uzun int'ye dönüştürür.

çift ​​strtod (const char *str, char **endptr);

bir sayının sembolik gösterimini ikiye dönüştürür.

Bu paragrafta listelenen tüm işlevler, söz konusu sayının biçimine uymayan ilk karakterle karşılaştıklarında çalışmalarını durdurur.

Ayrıca, bir sayının karakter değeri, karşılık gelen veri türü için izin verilen değerler aralığını aşarsa, atof, strtol, strtoul, strtod işlevleri, errno değişkeninin değerini ERANGE olarak ayarlar. errno değişkeni ve ERANGE sabiti, math.h başlık dosyasında tanımlanır. atof ve strtod işlevleri HUGE_VAL değerini, strtol işlevi LONG_MAX veya LONG_MIN değerini ve strtoul işlevi ULONG_MAX değerini döndürür.

Standart olmayan itoa, ltoa, utoa, ecvt, fcvt ve gcvt işlevleri, sayısal verileri karakter dizilerine dönüştürmek için kullanılabilir. Ancak bu amaçlar için standart sprintf işlevini kullanmak daha iyidir.

1.6. Dizelerle çalışmak için standart işlevler.

Bu bölümde, prototipleri string.h başlık dosyasında açıklanan dizelerle çalışma işlevleri ele alınmaktadır.

1. Dize karşılaştırması. strcmp ve strncmp işlevleri, dizeleri karşılaştırmak için kullanılır.

int strcmp (const char *str1, const char *str2);

str1, str2 dizelerini sözlükbilimsel olarak karşılaştırır ve str1 sırasıyla str2'den küçük, ona eşit veya ondan büyükse -1, 0 veya 1 döndürür.

int strncmp (const char *str1, const char *str2, size_t n);

str1 ve str2 dizelerinden en fazla ilk n karakteri sözlükbilimsel olarak karşılaştırır. str1'in ilk n karakteri sırasıyla str2'nin ilk n karakterinden küçük, ona eşit veya ondan büyükse işlev -1, 0 veya 1 döndürür.

// dize karşılaştırma örneği

#Dahil etmek

#Dahil etmek

char str1 = "aa bb";

karakter str2 = "aa aa";

char str3 = "aa bb cc";

printf("%d\n", strcmp(str1, str3)); // yazdırır: -1

printf("%d\n", strcmp(str1, str1)); // yazdırır: -0

printf("%d\n", strcmp(str1, str2)); // yazdırır: 1

printf("%d\n", strncmp(str1, str3, 5)); // yazdırır: 0

2. Satırları kopyalama. strcpy ve strncpy işlevleri, dizeleri kopyalamak için kullanılır.

char *strcpy (char *str1, const char *str2);

str2 dizesini str1 dizesine kopyalar. str2 dizesi, sonlandırıcı boş bayt da dahil olmak üzere bütünüyle kopyalanır. İşlev, str1'e bir işaretçi döndürür. Çizgiler üst üste gelirse, sonuç tahmin edilemez.

char *strncpy (char *str1, const char *str2, size_t n);

n karakterini str2'den str1'e kopyalar. str2 dizesi n'den az karakter içeriyorsa, son boş bayt, str2 dizesini n karaktere genişletmek için gerektiği kadar kopyalanır. İşlev, str1 dizesine bir işaretçi döndürür.

char str2 = "Dizeyi kopyala.";

strcpy(str1, str2);

printf(str1); // yazdırır: Dizeyi kopyala.

4. Bağlama dizeleri. strcat ve strncat işlevleri, dizeleri tek bir dizede birleştirmek için kullanılır.

char* strcat (char *str1, const char *str2);

str2 dizesini, str1 dizesinin sonlandırıcı boş baytı silinerek str1 dizesine ekler. İşlev, str1 dizesine bir işaretçi döndürür.

char* strncat (char *str1, const char *str2, size_t n);

str2'den str1'e kadar n karakteri birleştirir, str1'in sonlanan boş baytını siler. İşlev, str1 dizesine bir işaretçi döndürür. str2 dizesinin uzunluğu n'den küçükse, yalnızca str2 dizesinde bulunan karakterler eklenir. Dize bitiştirme işleminden sonra, str1'e her zaman boş bir bayt eklenir. İşlev, str1 dizesine bir işaretçi döndürür.

#Dahil etmek

#Dahil etmek

char str1 = "dize";

char str2 = "katenasyon";

char str3 = "Evet Hayır";

strcat(str1, str2);

printf("%s\n", str1); // yazdırır: Dize katenasyonu

strncat(str1, str3, 3);

printf("%s\n", str1); // yazdırır: String catenation Evet

5. Bir dizgede bir karakter arayın. strchr, strrchr, strspn, strcspn ve strpbrk işlevleri, bir dizgede bir karakter aramak için kullanılır.

char* strchr (const char *str, int c);

str dizesinde c parametresi tarafından belirtilen karakterin ilk oluşumunu arar. Başarı durumunda işlev, bulunan ilk karaktere bir işaretçi, başarısızlık durumunda ise NULL döndürür.

char* strrchr (const char *str, int c);

str dizesinde c parametresi tarafından belirtilen karakterin son oluşumunu arar. Başarı durumunda, işlev en son bulunan karaktere bir işaretçi, başarısızlık durumunda ise NULL döndürür.

#Dahil etmek

#Dahil etmek

char str = "karakter arama";

printf("%s\n", strchr(str, "r")); // yazdırır: r arama

printf("%s\n", strrchr(str, "r")); // yazdırır: rch

size_t strspn (const char *str1, const char *str2);

str1'deki str2'de olmayan ilk karakterin dizinini döndürür.

size_t strcspn (const char *str1, const char *str2);

str1'deki str2'deki ilk karakterin dizinini döndürür.

char str = "123 abc";

printf("n = %d\n", strspn(str, "321"); // yazdırır: n = 3

printf ("n = %d\n", strcspn (str, "cba"); // yazdırır: n = 4

char* strpbrk (const char *str1, const char *str2);

str1'deki, str2'deki karakterlerden birine eşit olan ilk karakteri bulur. Başarı durumunda, işlev bu karaktere bir işaretçi ve başarısızlık durumunda NULL döndürür.

char str = "123 abc";

printf("%s\n", strpbrk(str, "bca")); // yazdırır: abc

6. Dizelerin karşılaştırılması. strstr işlevi, dizeleri karşılaştırmak için kullanılır.

char* strstr (const char *str1, const char *str2);

str1 dizesinde str2 dizesinin ilk oluşumunu (sondaki boş bayt olmadan) bulur. Başarı durumunda işlev, bulunan alt dizeye bir işaretçi, başarısızlık durumunda ise NULL döndürür. str1 işaretçisi sıfır uzunluklu bir dizeye işaret ediyorsa, işlev str1 işaretçisini döndürür.

char str = "123 abc 456;

printf("%s\n", strstr(str, "abc"); // yazdır: abc 456

7. Bir dizgiyi belirteçlere ayrıştırma. strtok işlevi, bir dizeyi belirteçlere ayrıştırmak için kullanılır.

char* strtok (char *str1, const char *str2);

str1 dizesindeki bir sonraki simgeye (kelime) bir işaretçi döndürür; burada belirteç ayırıcılar str2 dizesinden karakterlerdir. Belirteçler bittiyse, işlev NULL döndürür. strtok işlevine yapılan ilk çağrıda, str1 parametresi belirteçlere ayrıştırılan bir dizeye işaret etmelidir ve sonraki çağrılarda bu parametre NULL olarak ayarlanmalıdır. Belirteci bulduktan sonra, strtok işlevi, sınırlayıcı yerine bu belirteçten sonra boş bir bayt yazar.

#Dahil etmek

#Dahil etmek

char str = "12 34 ab cd";

p = strtok(str, " ");

printf("%s\n",p); // değerleri bir sütuna yazdırır: 12 34 ab cd

p = strtok(NULL, " ");

8. Dizinin uzunluğunun belirlenmesi. strlen işlevi, bir dizenin uzunluğunu belirlemek için kullanılır.

size_t strlen(const char *str);

son boş baytı yok sayarak dizenin uzunluğunu döndürür. Örneğin,

karakter dizisi = "123";

printf("len = %d\n",strlen(str)); // yazdırır: len = 3

1.7. Bellekle çalışmak için işlevler.

string.h başlık dosyası ayrıca, dizgelerle çalışmak için karşılık gelen fonksiyonlara benzeyen bellek bloklarıyla çalışma fonksiyonlarını da açıklar.

void* memchr(const void *str, int c, size_t n);

str'nin n baytında c tarafından belirtilen karakterin ilk oluşumunu arar.

int memcmp(const void *str1, const void *str2, size_t n);

str1 ve str2'nin ilk n baytını karşılaştırır.

void* memcpy(const void *str1, const void *str2, size_t n);

ilk n baytı dizge str1'den dizge str2'ye kopyalar.

void* memmove(const void *str1, const void *str2, size_t n);

ilk n baytı str1'den str2'ye kopyalar ve örtüşen dizelerin doğru şekilde işlenmesini sağlar.

void* memset(const void *str, int c, size_t n);

c ile belirtilen karakteri str'nin ilk n baytına kopyalar.