A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© FlyTrem 中级黑马   /  2014-3-23 09:00  /  1675 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 FlyTrem 于 2014-3-24 14:59 编辑
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i,j,x;
  5.     char a[]="342";
  6.     char b[]="17";
  7.     char c[10];
  8.    
  9.     i=a[0]*100+a[1]*10+a[2];
  10.     j=b[0]*10+b[1];      

  11.     x=i-j;
  12.    
  13.     c[0]=x/100;
  14.     c[1]=(x-c[0]*100)/10;
  15.     c[2]=x%10;
  16.    
  17.     printf("%s",c);
  18.     return 0;
  19. }
复制代码

这个是一开始写的,对于数值型字符串转化为整型,但是错误的,后来知道是运算时以ASCII值的!那要对这类的字符串转化为整型应该怎么做呢?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
函数原型: int atoi(const char *nptr);
需要用到的头文件: #include <stdlib.h>


比如
char *str=“14321432”,
int n;
n=atoi(str);

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
不过atoi只能实现十进制字符串转换,所以使用sscanf也行
回复 使用道具 举报
sscanf的用法举例
1. 常见用法。
1
2
3
charbuf[512];
sscanf("123456","%s",buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
printf("%s\n",buf);
结果为:123456
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
1
2
sscanf("123456","%4s",buf);
printf("%s\n",buf);
结果为:1234
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
1
2
sscanf("123456abcdedf","%[^]",buf);
printf("%s\n",buf);
结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
1
2
sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);
printf("%s\n",buf);
结果为:123456abcdedf
当输入:  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);
1
printf("%s\n",buf);
结果为:123456BCDEF
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
1
2
sscanf("123456abcdedfBCDEF","%[^A-Z]",buf);
printf("%s\n",buf);
结果为:123456abcdedf
6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,
先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
1
2
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);
printf("%s\n",buf);
结果为:12DDWDFF
7、给定一个字符串“hello, world”,仅保留world。
(注意:“,”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
1
2
sscanf(“hello,world”,"%*s%s",buf);
printf("%s\n",buf);
结果为:world
%*s表示第一个匹配到的%s被过滤掉,即“hello,”被过滤了
如果没有空格则结果为NULL。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
光是就题目而言,其实你将数字的ascii码值减去0的ascii码值就行了。如i,j可以改成如下:

    i=(a[0] - '0') * 100 + (a[1] - '0') * 10+(a[2] - '0');
    j=(b[0] - '0') * 10 + (b[1] - '0');
这只是光就代码中的字符串转换成数字。最好把它写成一个函数,可扩展。itoa和atoi。
将整数转换成字符串可以简单如下实现:
sprintf(c, "%d",  x);

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
董月峰 发表于 2014-3-23 11:23
sscanf的用法举例
1. 常见用法。
1

很具体谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马