2012-05-14 18 views
10

Dizgede bir karakterin oluşumunu nasıl sayabilirim?Bir String nesnesindeki karakter oluşumları C

Örnek

Dize: Ben oluşumu sayısını bulmak istiyoruz 123-456-7890

"-" Verilen dizede

+4

tekrarlayın: Eğer kopya serbest değildir gibi http://stackoverflow.com/questions/938095/nsstring-number-of-occurrences-of-a-character – hellslam

cevap

31

Sadece böyle yapabilirsiniz:

NSString *string = @"123-456-7890"; 
int times = [[string componentsSeparatedByString:@"-"] count]-1; 

NSLog(@"Counted times: %i", times); 

Çıktı: Bu işi yapacak

Counted times: 2

+0

Ayrıca, dizide kaç tane SPACES oluştuğunu bulmak için en iyi kod. . . –

+0

Dize '-' ile başlıyorsa ne olur? – Oscar

+3

@Oscar Hala çalışır, sadece test ettim. Kendin denedin mi? – CyberMew

1
int num = [[[myString mutableCopy] autorelease] replaceOccurrencesOfString:@"-" withString:@"X" options:NSLiteralSearch range:NSMakeRange(0, [myString length])]; 

replaceOccurrencesOfString:withString:options:range: yöntem yapılan değişiklik sayısını döndürür, bu yüzden kaç tane - s dizinizde.

+0

bir bellek sızıntısına neden olmaz ? – trojanfoe

+0

@trojanfoe Kursun kopyasını serbest bırakmalısınız, ancak cevabın kapsamı dışında. –

+1

@ H2CO3 Bu kodla, kopyaya bir işaretçiniz olmadığı için de mümkün değildir. Bu kapsam dışı, evet, ama birçok yeni başlayanlar bu kodu kopyalamaya ve muhtemelen neden bellek sızdıklarını merak ediyorlar. – trojanfoe

1

Bu çalıştı NSString

1
int total = 0; 
NSString *str = @"123-456-7890"; 
for(int i=0; i<[str length];i++) 
{ 
    unichar c = [str characterAtIndex:i]; 
    if (![[NSCharacterSet alphanumericCharacterSet] characterIsMember:c]) 
    { 
     NSLog(@"%c",c); 
     total++; 
    } 
} 
NSLog(@"%d",total); 

ait replaceOccurrencesOfString:withString:options:range: yöntemi kullanabilirsiniz. Umarım yardımcı olur. mutlu kodlama :)

2

,

int numberOfOccurences = [[theString componentsSeparatedByString:@"-"] count]; 
2

I Bunu senin için yaptı. bunu dene.

unichar findC; 
int count = 0; 
NSString *strr = @"123-456-7890"; 

for (int i = 0; i<strr.length; i++) { 
    findC = [strr characterAtIndex:i]; 
    if (findC == '-'){ 
     count++; 
    } 
} 

NSLog(@"%d",count);