实现字符串中的数字转换为整型,具体规则见源码注释。gcc编译通过。
第一种代码,过程有些繁琐:
#include<stdio.h>
/* 求幂
* 此处求幂也可以调用math.h中的函数pow(),
* 编译时添加“-lm”参数。 */
double mypow(double x,double y)
{
int tmp=1;
while(y-->0)
{
tmp*=x;
}
return tmp;
}
/* 转化字符串中的数字字符到整数。规则如下:
* 1、如果字符串开始是一个字母,则返回零;
* 2、否则,把数字字符转换成整型数,直到遇到字母字符为止。
*/
int myatoi(const char *str)
{
int i=0,j=0,rslt=0;
if(*str<'0'||*str>'9') return 0;
while(*str>='0'&&*str<='9')
{
str++;
i++;
}
while(i-->0)
{
rslt+=(int)mypow(10,j++)*(*--str-'0');
}
return rslt;
}
int main()
{
char *strtest1="a1234",*strtest2="6789d";
printf("%d\n%d\n",myatoi(strtest1),myatoi(strtest2));
return 0;
}
另一段代码,对符号等做出判断,转换思路做出优化:
#include<stdio.h>
/* 转化字符串中的数字字符到整数。规则如下:
* 1、如果字符串开始是一个字母,则返回零;
* 2、否则,把数字字符转换成整型数,直到遇到字母字符为止;
* 3、另有符号空格等的判断。
*/
int myatoi(const char *str)
{
int sign=1,rslt=0;
while(' '==*str||'\t'==*str) str++;
if('-'==*str)
{
sign=-1;
str++;
}
else if('+'==*str) str++;
while('0'==*str) str++;
if(*str<'0'||*str>'9') return 0;
while(*str>'0'&&*str<='9')
rslt=rslt*10+(*str++-'0');
return sign*rslt;
}
int main()
{
char *strtest1=" 1234",\
*strtest2="-6789d",\
*strtest3="+0324dk",\
*strtest4="0043 5",\
*strtest5="-s0012";
printf(\
"%d\n%d\n%d\n%d\n%d\n",\
myatoi(strtest1),\
myatoi(strtest2),\
myatoi(strtest3),\
myatoi(strtest4),\
myatoi(strtest5)\
);
return 0;
}
May contact with me via e-mail: AllenNewOK@126.com
分享到:
相关推荐
为了解决这个问题,我们可以首先将整型字符串转换为整数,然后再进行排序。这里我们可以使用`atoi`或`strtol`函数将字符串转换为整数。转换完成后,可以使用常见的排序算法,如冒泡排序、选择排序、插入排序、快速...
在C++编程中,有时我们需要将字符串转换为数值类型,如整型、浮点型等,反之亦然。Boost库提供了一个非常实用的工具——`lexical_cast`,它简化了这个过程,使得转换更加安全和方便。本篇将详细介绍Boost库中的`...
5. **strtol**:此函数用于将字符串转换成长整型数,可以指定基数(2-36),允许用户控制转换的基数,比如二进制、八进制、十六进制等。它返回一个长整型数,并提供指针指向未转换的字符串剩余部分。 6. **strtoul*...
- atoi():将字符串转换为整数。 - atol():将字符串转换为长整数。 - strtod():将字符串转换为双精度浮点数。 上述函数中,itoa(), ltoa()和ultoa()函数在标准C库中没有定义,它们是许多编译器提供的非标准扩展,...
2. **字符串到数值的转换**:提供从字符串解析数字的方法,例如`atoi`、`atof`等。 3. **字符串比较**:实现不区分大小写的字符串比较,或者根据特定规则的字符串排序。 4. **字符串清理**:去除字符串两端的空白...
C语言提供了`atoi()`,`atol()`,`atof()`等函数将字符串转换成对应的整型、长整型和浮点型数值。反之,`sprintf()`和`snprintf()`可以将数值转换成字符串。例如: ```c #include int main() { char str[20]; ...
- 使用atoi()函数:atoi()函数可以把C风格的字符串转换为整型。例如,int i = atoi("123");会将字符串"123"转换为整数123。 - 使用atol()函数:atol()函数和atoi()类似,不过它用来转换的是长整型(long)。 - 使用...
- **功能描述**: `atoi` 函数用于将一个字符串转换成整型数。它的行为类似于 `atof`,但最终返回的是整数值。 - **返回值**: 返回转换后的整数。 - **示例代码**: ```c #include #include int main() { ...
atoi()函数可以将一个字符串转换成整型数。该函数会扫描参数字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 例子: ```c #...
2. atoi() 函数:将字符串转换成整型数 atoi() 函数的定义在stdlib.h头文件中,函数原型为:int atoi(const char *nptr); atoi() 函数会扫描参数 nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始...
`itoa`函数将整型转换为字符串,`atoi`将字符串转换为整型,`atol`将字符串转换为长整型,而`atof`则是将字符串转换为双精度浮点型。这些函数在使用时需要包含相应的头文件,并要注意其返回类型。 转换为字符串型的...
- **`atoi`**:将字符串转换为整型数(int),但不支持指定进制。 - **`atol`**:将字符串转换为长整型数(long int),也不支持指定进制。 - **`atof`**:将字符串转换为浮点数(double)。 #### 五、总结 通过...
- `atol()`, `_atol_l()`, `_wtol()`: 类似地,这些函数用于将字符串转换为长整型(`long`)。 - `_atoi64()`, `_atoi64_l()`, `_wtoi64()`, `_wtoi64_l()`: 用于将字符串转换为64位整数(`__int64`)。 - `atof...
面试必备的小程序,能把字符数组"123"转换成整型的123;
这个主题包括了将字符串转换为整数(如`atoi()`函数)和将整数转换为字符串(如`itoa()`函数或`printf()`格式化输出)。下面,我们将详细探讨这些转换方法以及需要注意的细节。 首先,我们来看如何将字符串转换为...
例如,当使用`strtoul()`将超出无符号长整型范围的字符串转换为数字时,它会返回最大值`ULONG_MAX`(通常为4294967295),并将指针类型的`leftover`参数设置为字符串中导致溢出的字符位置。同时,全局变量`errno`会...
**1.2 将字符串转换为数字** ```cpp #include #include int stringToNum(const std::string& str) { std::istringstream in(str); // 构造一个对象来解析字符串 int num; in >> num; // 从字符串中读取整数 ...