字符串是若干字符组成的序列。由于字符串在编程时使用的频率非常高,为了优化,很多语言都对字符串进行了优化。
C/C++中每个字符串都以字符‘\0’为结尾,这样就可以很方便地查到字符串的最后尾部。
为了节省内存,C/C++把常量值保存在单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。如果用常量内存初始化字符串数组,会为它们分配两个长度为n的空间,并把常量值分别复制到数组中去。
面试题1. 实现atoi函数。
enum Status{kValid = 0, kInvalid};
int g_nStatus = kValid;
int atoi(const char * str)
{
g_nStatus = kInvalid;
long long num = 0;
if(str != NULL && *str != '\0')//判断是否为空字符串
{
bool minus = false;
if(*str == '+')
{
str++;
}
else if(*str == '-')
{
str++;
minus = true;
}
if(*str != '\0') //用来判断只有‘+’或者‘-’的情况
{
num = StrToInt(str, minus);
}
}
return (int)num;
}
int StrToInt(const char * str, int minus)
{
long long num = 0;
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
num = num*10 + (*str - '0');
if((!minus && num > 0x7FFFFFFF)|| (minus && num < 0x80000000))//用来判断是否溢出
{
num = 0;
break;
}
str++;
}
else //如果有其他字符
{
num = 0;
break;
}
}
if(*str == '\0') //将标注位g_nStatus位置为0
{
g_nStatus = kValid;
}
int flag = minus?-1:1;
return num*flag;
}