刘涛涛题目,无聊写了下
来源:互联网 发布:软件体系结构 组成 编辑:程序博客网 时间:2024/04/29 07:36
// 刘涛涛题目
// 有一个字符串,里面包含一些数字,写一个函数, 把这些数字加起来。
// 比如“我30你40他50”结果就是120。
给弟弟写的,丢这给你看
/**///////////////////////////////////////////////////////////////////////////////
//
// 刘涛涛题目
// 有一个字符串,里面包含一些数字,写一个函数, 把这些数字加起来。
// 比如“我30你40他50”结果就是120。
//
/**///////////////////////////////////////////////////////////////////////////////
// 头文件
#include <stdio.h>
/**///////////////////////////////////////////////////////////////////////////////
// 全局变量
/**///////////////////////////////////////////////////////////////////////////////
// 参数表
/**///////////////////////////////////////////////////////////////////////////////
// 入口点
int main(int argc, char* argv[])
...{
char *cPtr=NULL,*cIter=NULL;
char *buf;
int len,i,sum=0;
if (argc < 2)
...{
printf("[+] Usage: %s {#input string} "
"[-] Example: %s 我30你40他50 "
"[-] ---->Result: 120 ",
argv[0],argv[0]);
exit(1);
}
// 复制字符串
len = strlen(argv[1]);
buf = (char*)malloc(len+1);
strcpy(buf,argv[1]);
printf("input string length = %d ",len);
printf("input string is: %s ",argv[1]);
printf("copyed string is: %s ",buf);
// 截断字符串,将其变为多个字符串,计算每个数字字串
for(i=0;i<len;i++)
...{
if(buf[i] >= '0' && buf[i] <= '9') // 字符为数字
...{
cPtr = buf+i;
cIter = cPtr+1;
while (*cIter >= '0' && *cIter <= '9') // 寻找数字字符串
...{
cIter++;
i++;
}
*cIter = '/0';
//
// 刘涛涛题目
// 有一个字符串,里面包含一些数字,写一个函数, 把这些数字加起来。
// 比如“我30你40他50”结果就是120。
//
/**///////////////////////////////////////////////////////////////////////////////
// 头文件
#include <stdio.h>
/**///////////////////////////////////////////////////////////////////////////////
// 全局变量
/**///////////////////////////////////////////////////////////////////////////////
// 参数表
/**///////////////////////////////////////////////////////////////////////////////
// 入口点
int main(int argc, char* argv[])
...{
char *cPtr=NULL,*cIter=NULL;
char *buf;
int len,i,sum=0;
if (argc < 2)
...{
printf("[+] Usage: %s {#input string} "
"[-] Example: %s 我30你40他50 "
"[-] ---->Result: 120 ",
argv[0],argv[0]);
exit(1);
}
// 复制字符串
len = strlen(argv[1]);
buf = (char*)malloc(len+1);
strcpy(buf,argv[1]);
printf("input string length = %d ",len);
printf("input string is: %s ",argv[1]);
printf("copyed string is: %s ",buf);
// 截断字符串,将其变为多个字符串,计算每个数字字串
for(i=0;i<len;i++)
...{
if(buf[i] >= '0' && buf[i] <= '9') // 字符为数字
...{
cPtr = buf+i;
cIter = cPtr+1;
while (*cIter >= '0' && *cIter <= '9') // 寻找数字字符串
...{
cIter++;
i++;
}
*cIter = '/0';
sum += atoi(cPtr);
printf("i = %d/tcurrent string: %s/tsum = %6d/n",i,cPtr,sum);
}
}
printf("---->Result: %d/n",sum);
free(buf);
return 0;
}
//////////////////////////////////////////////////////////////////////////////
printf("i = %d/tcurrent string: %s/tsum = %6d/n",i,cPtr,sum);
}
}
printf("---->Result: %d/n",sum);
free(buf);
return 0;
}
//////////////////////////////////////////////////////////////////////////////
他的问题:
1。实现时有错误,看了下atoi的实现,如果输入字符中有两个--相连的时候,atoi会跳过该数字,如 "aker--9=10"只会计算10
2。另外感觉dwing每次调用atoi还是有些不好,稍微改了下,主要是加了个判断,这样就会少调用很多次atoi了。
#include <stdio.h>
#include <stdlib.h>
int mysum(const char *str)
...{
int s=0;
do
...{
if(*str>='0' && *str<='9')
...{ // 如果是数字则试图计算
printf("sum = %6d current string: %s ",s,str);
s+=atoi(str);
while(*str>='0' && *str<='9')++str; // 该数字串已计算,跳过数字
}
}while(*str++);
return s;
}
void main(int argc,char **argv)
...{
if(argc==2) printf("%d ",mysum(argv[1]));
}
#include <stdlib.h>
int mysum(const char *str)
...{
int s=0;
do
...{
if(*str>='0' && *str<='9')
...{ // 如果是数字则试图计算
printf("sum = %6d current string: %s ",s,str);
s+=atoi(str);
while(*str>='0' && *str<='9')++str; // 该数字串已计算,跳过数字
}
}while(*str++);
return s;
}
void main(int argc,char **argv)
...{
if(argc==2) printf("%d ",mysum(argv[1]));
}
2007-07-07 看了贴子,Roba的比较简单
2007-06-16, 17:08 Roba写道,atoi()不是ANSI标准,要尽量避免使用,比方说在GCC里就是编译不过的。想要转化的话也可以用sscanf()。
写个不用库函数的:
int calc(char *buf) ...{
int i, s, ans;
for (i = s = ans = 0 ; buf[i] ; i++) ...{
if (buf[i] >= '0' && buf[i] <= '9')
s = s * 10 + buf[i] - '0';
else ...{ans += s; s = 0;}
}
return ans + s;
}
int i, s, ans;
for (i = s = ans = 0 ; buf[i] ; i++) ...{
if (buf[i] >= '0' && buf[i] <= '9')
s = s * 10 + buf[i] - '0';
else ...{ans += s; s = 0;}
}
return ans + s;
}
- 刘涛涛题目,无聊写了下
- 无聊写了一个小链表
- 今天无聊的时候 写了一个小题目 删除子串
- 无聊了上传题目自家做
- 无聊的一天看了写东西
- 无聊写了个看电影的程序,
- 假期实在无聊,写了个HelloWorld
- 无聊,做了几道baidu之星的题目
- 好久没写博客了,今日加班无聊写个博
- 今天自己写了个无聊的测试
- 无聊用一个DIV写了一套字母数字表
- 无聊写的无聊东西
- 无聊写的
- 无聊时候写的。。。
- 无聊,瞎写
- 无聊时写之。。。
- 无聊写篇博客
- 无聊写的压位高精加
- 我的专题文章之二----对中断的总结
- 用jfreechat编写图形化统计数据程序(实例)
- 使用SQL完成hibernate saveOrUpdate功能
- 单向链表的节点删除
- oracle之merge语法
- 刘涛涛题目,无聊写了下
- 深入GetMessage和PeekMessage
- 第一篇啊
- 487-3279 - PKU 1002
- 鞋好久没有穿坏过了
- 因为有了老狼,老虎,我们不在是兔子.
- Google Gears
- asp.net利用RAR实现文件压缩解压缩【月儿原创】
- Lucene 的学习