Pergunta sobre nsstring, ipad, objective-c, iphone – Ocorrências de caracteres em um Objetivo C de String

11

Como posso contar a ocorrência de um caractere em uma string?

Exemplo

String: 123-456-7890

Eu quero encontrar a contagem de ocorrências de "-" na string dada

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

Sua resposta

7   a resposta
2

Isso fará o trabalho

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

r com o caractere que você está verificando.

Use isso em vez disso:

int numberOfOccurances = (int)yourString.length - (int)[yourString stringByReplacingOccurrencesOfString:@"-" withString:@""].length;
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);

33

Você pode simplesmente fazer assim:

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

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

Saída:

Counted times: 2

@ Cœur você está absolutamente certo! Louca na minha opinião.gist.github.com/hfossli/4c76a96b34574cb938ce hfossli
É também o melhor código para descobrir quantos espaços ocorreram na string. . . Mohd Sadham
@Oscar Ele ainda vai funcionar, eu só testei isso. Você tentou você mesmo? CyberMew
@hfossli, você está errado, ele retornará 4 e 2, respectivamente. Cœur
2

Eu fiz isso por você. tente isso.

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

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

1
int num = [[[myString mutableCpy] autrelease] replaceOccurrencesOfString:@&qut;-&qut; withString:@&qut;X&qut; ptins:NSLiteralSearch range:NSMakeRange(0, [myString length])];

replaceOccurrencesOfString:withString:ptins:range: métd retrna númer de substituições que fram feitas, para que pssams usar iss para descbrir quantas-s estã na sua string.

Isso não causa um vazamento de memória porque você não está liberando a cópia? trojanfoe
@ H2CO3 Também não é possível com este código, pois você não tem um ponteiro para a cópia. Está fora do escopo, sim, mas muitos iniciantes provavelmente copiarão este código textualmente e depois se perguntarão por que estão vazando memória. trojanfoe
Isso é verdade, se você está fazendo gerenciamento de memória manual, entãoautorelease É necessário. Eu tenho usado o ARC por tanto tempo que eu esqueço que nem todo mundo é! Amy Worrall
adicionou um autorelease user529758
@trojanfoe Você tem que liberar a cópia, claro, mas está fora do escopo da resposta. user529758

Perguntas relacionadas