自己实现atoi

时间:2022-12-09 04:32:13
bool myatoi(const char *s,int &num)
{
cout<<(&s)<<endl;
num=;
while (*s)
{
if ((*s)>=''||(*s)<='')
{
num=num*+((*s)-'');
}
else
return false;
s++;
//cout<<"The address of pstr is: "<<static_cast<void*>(const_cast<char*>(str))<<endl;
cout<<"prt:"<<(void*)s<<endl;
}
return true;
}
int main()
{
char *s="";
int num;
myatoi(s,num);
cout<<num<<endl;
char s1='';
char s2='';
char s3=s1-s2;
cout<<s3<<endl;
int i=s1-s2;
cout<<i<<endl;
return ; }

首先要分清楚:字符数组和字符串的关系!
字符串存放在数组中,因此,一个字符数组可以存放几个串,单字符串函数只认字符串结束标志'\0';
1. strlen(wer wer):字符串为"wer_wer"这种字符串常量,系统会在其后自动补上'\0';而求字符串长度的函数strlen()只要遇见'\0';就返回函数值!而且'\0'不算在其中!故返回值为7(空格也算一个字符!)
2. strlen(wer\0wer) 其中的字符串为"wer\0wer"而strlen函数遇到'\0'即结束,故返回值为:3
3. '\0'不是空格,也不是回车!通过ASCII码表,你可知道,'\0'是ASCII码值代表0(NULL);而空格的ASCII码为:  '\32' 32 回车的ASCII码值为'\13'  13

所以while (*s)当s++到最后*s=NULL,循环结束。

注意打印字符串指针不能使cout<<s;

因为<<操作符重载了吧,会默认输出字符串的值。必须显示转换为(void *)才可取得地址。

规范写法:cout<<"The address of pstr is: "<<static_cast<void*>(const_cast<char*>(str))<<endl; 类型转换安全
        cout<<"prt:"<<(void*)s<<endl;这样也可以。

注意cout<<&s;输出的是字符串指针的地址。