1.关于char类型变量的大小
char类型如果直接用sizeof来计算大小,会输出4,比如a,在内存中以65存在,如果想要其输出1,要像瞎编这样来写:
int main()
{
char c = 'a';
int i = sizeof(c);
NSLog(@"%d",i);
return 0;
}
2.关于if函数
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int _age;
}
- (void)setAge:(int)Myage;
- (int)age;
@end
@implementation Student
- (void)setAge:(int)Myage
{
/* if(Myage<=0)
{
_age = 1;
}
else
{
_age = Myage;
}*/
if (Myage<=0)
{
_age = 1;
}
_age = Myage; // 这种写法是错误的,因为,if执行完之后,它总会执行这一句,这样_age的值总是Myage,正确写法在上边
}
- (int)age
{
return _age;
}
@end
int main()
{
Student *p = [Student new];
[p setAge:-10];
NSLog(@"p=%d",[p age]);
return 0;
}
3.如果出现Thread1:signal SIGABRT
说明,越界了,你调用了一个不存在的内容,比如,只有10个数,你偏偏说要用第11个
NString *ns = @"123"
NSMutableString *str1 =[NSMutableString string];
for (NSInteger i = ns.length;i>=0;i--)
{
NSString *str2 = [ns substringWithRange:NSMakeRange(i,1)]; // i=3,字符串只有0,1,2
[str1 appendString:str2];
}
4.局部变量要初始化,否则它就是任意值
5.如果在字符串中删除某个字符,那么后边的字符会自动补上
//给一个英文句子,罗列出句子中出现的字母和其出现的次数,不区分大小写。
#import <Foundation/Foundation.h>
int main()
{
/*
NSLog(@"please input a sentence");
char *str2;
gets(str2);
*/
NSMutableString *str = [NSMutableString stringWithFormat:@"dsafsdfdmmsm"];
for (int i=0;i<str.length;i++)
{
int count = 1;
for (int j=i+1;j<str.length;j++)
{
if ([str characterAtIndex:i] == [str characterAtIndex:j])
{
count++;
[str deleteCharactersInRange:NSMakeRange(j,1)];
<span style="color:#cc0000;">j--;// 一直错,因为少这一行,因为你删除了一个字母,下一行的时候就会直接判断下一个是否相等。</span>
}
}
NSLog(@"%dge%c",count,[str characterAtIndex:i]);
count = 1;
}
return 0;
}
6.调用scanf或者gets的时候,如果定义为char *name后边很容易出EX-BAD错误,这个时候就要替换为char name[100],这样就不会报错了
int main()
{
NSLog(@"please input a sentence");
<span style="color:#ff0000;"> char sen[100];
gets(sen);</span>
NSMutableString *str = [NSMutableString stringWithUTF8String:sen];
int count = 1;
for (int i=0;i<str.length;i++)
{
for (int j=i+1;j<str.length;j++)
{
if ([str characterAtIndex:i] == [str characterAtIndex:j])
{
count++;
NSRange range1 = NSMakeRange(j,1);
[str deleteCharactersInRange:range1];
j--;
}
}
NSLog(@"%dge%c",count,[str characterAtIndex:i]);
count = 1;
}
return 0;
}