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

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

Восстановить пароль Регистрация
Другие темы раздела
Objective-C Преобразование char в string http://www.cyberforum.ru/objective-c/thread625042.html
Как приравнять значение перенной str типа NSString значению переменной ch типа char?
Objective-C Преобразование строки в символы Дана строка 2+2. Как сделать чтобы символ 2 записался в переменную x, символ + записался в переменную z, символ 2 записался в переменную y http://www.cyberforum.ru/objective-c/thread624924.html
Objective-C Вычисление выражения в строке
Есть строка 2+2= Как мне преобразовать эту строку чтобы посчитать и написать результат?Тут наверное надо использовать обратную польскую запись???
Objective-C Массив: Как строку приравнять к массиву и просмотреть каждый элемент?
Как строку приравнять к массиву и просмотреть каждый элемент?
Objective-C Как добавить текст к тексту в текстовом поле? http://www.cyberforum.ru/objective-c/thread624831.html
Как добавить текст к тексту в текстовом поле? Когда программировал на C# это примерно выглядело вот так: tb1.text=tb1.text+"ыыы"; tb1-текстовое поле. Это еще называется конкатенацией строк!Только не надо писать что в гугле куча ссылок!))
Objective-C Не могу понять, где ошибка? Всеем привет! Я продвинулся в изучении Objective-C, дошел до запуска программы в XCode, но столкнулся с непредвиденной проблемой - XCode показывает, что в коде есть ошибка. Вот сам код: #include <iostream> float circleArea(float theRadius); // float rectangleArea(float width, float height); // int main (int argc, const char * argv) // { подробнее

Показать сообщение отдельно
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
18.07.2012, 13:23     Преобразование строки в массивы
Сравнивайте посимвольно с условием
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;
}
 
Текущее время: 13:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru