Форум программистов, компьютерный форум CyberForum.ru

Преобразование строки в массивы - Objective-C

Восстановить пароль Регистрация
 
Sergey4590
1 / 1 / 0
Регистрация: 16.05.2012
Сообщений: 106
18.07.2012, 11:51     Преобразование строки в массивы #1
Как пробежаться по строке NSString str=@"11+22*33"; и записать все числа в числовой массив,а все символы в символьный массив???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 11:51     Преобразование строки в массивы
Посмотрите здесь:

Objective-C Массивы (музыкальная программа)
Objective-C Преобразование строки в символы
Objective-C Преобразование char в string
Двухмерные массивы. Создание,изменение,хранение Objective-C
Где хранить массивы? Objective-C
Массивы и строки Objective-C

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
18.07.2012, 13:23     Преобразование строки в массивы #2
Сравнивайте посимвольно с условием
C
1
2
3
4
5
6
char ch = /*ваш символ*/;
if(ch >= '0' && ch <= '9') {
/*пишите в числовой массив*/
} else {
/*Все остальное - не цифры*/
}
Если сами не напишите продолжение - через пару часов может накидаю чего, сейчас работа.

Добавлено через 1 час 19 минут
Мозг родил такую фигню:
Для выражений с беззнаковыми числами сработает.
Отталкивался от необходимости решения примера : @"2+2"
Будет время - улучшу до чегонибудь более серьезного
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#import <Foundation/Foundation.h>
 
@interface BasicIntMathExpression : NSObject {
    NSInteger _arg1;
    char _operator;
    NSInteger _arg2;
}
 
- (int)calculate;
- (id)initWithString:(NSString*)string;
 
@end
 
@implementation BasicIntMathExpression
 
bool isOperator(NSString *str) {
    if ([str length] > 1 || [str length] == 0) {
        return NO;
    }
    char ch = [str characterAtIndex:0];
    return (ch == '-' || ch == '+' || ch == '*' || ch == '/');
}
 
- (id)initWithString:(NSString*)string {
    self = [super init];
    if (self) {
        if (![self parse:string]) {
            @throw @"BasicMathExpression: Bad expression";
        } 
    }
    return self;
}
 
- (BOOL)parse:(NSString *)string {
    
    NSString *pattern = @"([0-9]+)(\\+|\\-|\\*|\\/)([0-9]+)";
    
    NSRegularExpression *regex = [NSRegularExpression 
                                  regularExpressionWithPattern:pattern
                                  options:NSRegularExpressionCaseInsensitive\
                                  error:nil];
    NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, string.length)];
    
    if (!match) {
        return NO;
    }
    
    for (int groupNumber=1; groupNumber<match.numberOfRanges; groupNumber+=1) {
        NSRange groupRange = [match rangeAtIndex:groupNumber];
        NSString *group = [string substringWithRange:groupRange];
        if (!isOperator(group)) {
            NSInteger *arg;
            if (groupNumber == 1) {
                arg = &_arg1;
            } else if (groupNumber == 3) {
                arg = &_arg2;
            }
            *arg = [group integerValue];
        } else {
            _operator = [group characterAtIndex:0];
        }
    }
    return YES;
}
 
- (int)calculate {
    if (_operator == '+') {
        return _arg1+_arg2;
    } else if (_operator == '-') {
        return _arg1-_arg2;
    } else if (_operator == '*') {
        return _arg1*_arg2;
    } else if (_operator == '/') {
        return _arg1/_arg2;
    }
    return 0;
}
 
@end
 
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        BasicIntMathExpression *expr = [[BasicIntMathExpression alloc] initWithString:@"22+2"];
        int addition = [expr calculate];  
        expr = [[BasicIntMathExpression alloc] initWithString:@"22*2"];
        int multiplication = [expr calculate]; 
        expr = [[BasicIntMathExpression alloc] initWithString:@"22/2"];
        int division = [expr calculate]; 
        expr = [[BasicIntMathExpression alloc] initWithString:@"22-2"];
        int subtraction = [expr calculate]; 
        NSLog(@"Addition: %d, multiplication: %d, division: %d, subtraction: %d", 
              addition, multiplication, division, subtraction);
    }
    return 0;
}
antonio_12
Сообщений: n/a
18.07.2012, 13:31     Преобразование строки в массивы #3
Вы какой массив имеете ввиду? NSArray или сhar[] ?
Yandex
Объявления
18.07.2012, 13:31     Преобразование строки в массивы
Ответ Создать тему
Опции темы

Текущее время: 15:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru