Pregunta sobre ipad, objective-c, nsstring, iphone – Apariciones de caracteres en un String Objective C

11

¿Cómo puedo contar la aparición de un carácter en una cadena?

Ejemplo

Cadena: 123-456-7890

Quiero encontrar el recuento de ocurrencias de "-" en una cadena dada

Repetir:stackoverflow.com/questions/938095/… hellslam

Tu respuesta

7   la respuesta
2

Hice esto por ti. prueba esto.

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);
0

na con el carácter que está verificando.

Use esto en su lugar:

int numberOfOccurances = (int)yourString.length - (int)[yourString stringByReplacingOccurrencesOfString:@"-" withString:@""].length;
33

Simplemente puedes hacerlo así:

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

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

Salida:

Counted times: 2

Sí, esto no funcionará con precisión si la subcadena está al final. Utilice la siguiente cadena de reemplazo, que devuelve el recuento de reemplazos. Fácil peasy, y precisa. - (NSUInteger) replaceOccurrencesOfString: (NSString *) target withString: (NSString *) opciones de reemplazo: (NSStringCompareOptions) rango de opciones: (NSRange) searchRange; Mike Critchley
¿Qué pasa si la cadena comienza con '-'? Oscar
@Oscar Todavía funcionará, acabo de probarlo. ¿Lo has intentado tú mismo? CyberMew
@ Cœur tienes toda la razón! Loco en mi opinión.gist.github.com/hfossli/4c76a96b34574cb938ce hfossli
1
int num = [[[myString mutableCopy] autorelease] replaceOccurrencesOfString:@"-" withString:@"X" options:NSLiteralSearch range:NSMakeRange(0, [myString length])];

replaceOccurrencesOfString:withString:options:range: El método devuelve el número de reemplazos que se hicieron, por lo que podemos usarlo para calcular cuántos-s están en su cadena.

Eso es cierto, si estás haciendo la gestión manual de la memoria, entoncesautorelease es requerido. ¡He estado usando ARC durante tanto tiempo que olvido que no todos lo son! Amy Worrall
añadido un autorelease user529758
@trojanfoe Tienes que liberar la copia, por supuesto, pero está fuera del alcance de la respuesta. user529758
@ H2CO3 Tampoco es posible con este código ya que no tiene un puntero a la copia. Está fuera de alcance, sí, pero es probable que muchos novatos copien este código literalmente y luego se pregunten por qué pierden la memoria. trojanfoe
¿Eso no provoca una pérdida de memoria ya que no está liberando la copia? trojanfoe
2

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

replaceOccurrencesOfString:withString:options:range: método deNSString

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);

Preguntas relacionadas