一.字符串的反转
示例: I love C++ 反转之后是 C++ love I
尽量的减少空间复杂度和事件复杂度
思路:先将每个单词进行反转再进行整体反转
局部反转:I evol ++C
全部反转:C++ love I
void Reverse_char(char str[])
{
if (str == NULL)
{
return;
}
char *start = str;
char *end = NULL;
char *pstr = str;
int flag = 0;
do
{
if (*pstr == ' ' || *pstr == '\0')
{
flag = 1;
end=pstr-1;
while (start < end)
{
char tmp = *start;
*start++ = *end;
*end-- = tmp;
}
}
if (flag)
{
start = pstr + 1;
flag = 0;
}
} while (*pstr++ != '\0');
pstr -= 2;
while (str < pstr)
{
char tmp = *str;
*str++ = *pstr;
*pstr-- = tmp;
}
}
int main()
{
char str[] = "i love C++";
Reverse_char(str);
cout << str << endl;
getchar();
return 0;
}
2.整数数字字符串转整形
int My_atoi(const char *str)
{
int symbol = 1;
int ret = 0;
const char *pstr = str;
while (*pstr ==' ')
{
pstr++;
}
while (*pstr != '\0')
{
if (*pstr == '-')
{
++pstr;
symbol = -1;
}
if (*pstr == '+')
{
++pstr;
symbol = 1;
}
if (*pstr >= '0' && *pstr =< '9')
{
ret = ret * 10 + (*pstr - '0');
}
pstr++;
}
return ret *symbol;
}
int main()
{
char str[] = "----fajfajf aaa12345 ";
//char str[] = " "
//char str[] = " +12345"
int ret =My_atoi(str);
cout << ret<< endl;
getchar();
return 0;
}
3.浮点数字符串转浮点数
double My_atof(const char *str)
{
int symbol = 1;
int result = 0;
int count = 0;
int flag = 0;
const char *pstr = str;
while (*pstr ==' ')
{
pstr++;
}
while (*pstr != '\0')
{
if (*pstr == '-')
{
++pstr;
symbol = -1;
}
if (*pstr == '+')
{
++pstr;
symbol = 1;
}
if (*pstr == '.')
{
++pstr;
flag = 1;
}
if (*pstr >='0' && *pstr <='9')
{
result = result * 10 + (*pstr - '0');
if (flag)
{
count++;
}
}
pstr++;
}
double ret = result *symbol;
for (int i = 0; i < count; ++i)
{
ret /= 10;
}
return ret;
}
int main()
{
char str[] = "1.....2345 ";
//char str[] = " "
//char str[] = " +1.2345"
double ret =My_atof(str);
cout << ret<< endl;
getchar();
return 0;
}