免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 11822 | 回复: 20
打印 上一主题 下一主题

字符串加1问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-28 22:15 |只看该作者 |倒序浏览
各位达人,小弟问下用C语言如何实现将字符串加1,例如:a = "010000023459";加1后结果输出字符串为"010000023460"
谢谢了

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2009-07-28 22:20 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-07-28 22:24 |只看该作者
好人啊!谢谢!

论坛徽章:
0
4 [报告]
发表于 2009-07-28 22:42 |只看该作者

比较简单的答案

void fun(char *str)
{
   int carry=1;
   int i=strlen(str);
   while(carry&&i)
   {
      i--;
      carry=0;
      switch( str[ i ] )
     {
     case '9':
          str[ i ]='0';
          carry=1;
          break;
     case '8':
          str[ i ]='9';
          break;
     case '7':
          str[ i ]='8';
          break;
     case '6':
          str[ i ]='7';
          break;
     case '5':
          str[ i ]='6';
          break;
     case '4':
          str[ i ]='5';
          break;
     case '3':
          str[ i ]='4';
          break;
     case '2':
          str[ i ]='3';
          break;
     case '1':
          str[ i ]='2';
          break;
     case '0':
          str[ i]='1';
          break;
     default:
          exit(-1);
     }  //end of switch
  } //end of while

   if( (carry==1) && (i==0))
  {
     exit(-1);  //overflow
  }
}

[ 本帖最后由 kalashnikova_ak74 于 2009-7-29 02:16 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-07-28 22:49 |只看该作者
不知道为何 "str" 不能显示........

论坛徽章:
0
6 [报告]
发表于 2009-07-29 02:18 |只看该作者
呵呵,短一点的版本:
#include <stdio.h>
#include <string.h>

char *fun(char *s)
{
&nbsp;&nbsp;&nbsp;&nbsp;int i = strlen(s);

&nbsp;&nbsp;&nbsp;&nbsp;while (i-- && s[i] == '9' ? s[i] = '0' : (s[i] += 1, 0));

&nbsp;&nbsp;&nbsp;&nbsp;return s;
}
&nbsp;&nbsp;&nbsp;&nbsp;

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;char s[] = "00000000000000000000000000";

&nbsp;&nbsp;&nbsp;&nbsp;while (1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(fun(s));

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}



也可以这样写,一样的道理,只是把那个 while 展开了:
#include <stdio.h>
#include <string.h>

char *fun(char *s)
{
&nbsp;&nbsp;&nbsp;&nbsp;int i = strlen(s);

&nbsp;&nbsp;&nbsp;&nbsp;while (i--)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (s[i] == '9')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i] = '0';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i] += 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;return s;
}

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;char s[] = "00000000000000000000000000";

&nbsp;&nbsp;&nbsp;&nbsp;while (1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(fun(s));

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}




代码格式乱了,害我编辑一编~~

[ 本帖最后由 windaoo 于 2009-7-29 02:20 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-07-29 02:25 |只看该作者

回复 #5 kalashnikova_ak 的帖子

kalashnikova_ak:要加上代码框才能显示正确

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
8 [报告]
发表于 2009-07-29 08:26 |只看该作者
牛人一大把啊。

论坛徽章:
0
9 [报告]
发表于 2009-07-29 10:23 |只看该作者
先转换成整数数字,+1。

论坛徽章:
0
10 [报告]
发表于 2009-07-29 10:36 |只看该作者
原帖由 思一克 于 2009-7-29 10:23 发表
先转换成整数数字,+1。

如果字符串超多就不能了,超过表示的最大数字了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP