求数字是否连续判断 的代码!

flyingakain 2004-09-25 06:01:43
如下:

字符串123456

判断该字符串中每一个数字是否连续,连续几位!
...全文
332 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdzwq 2004-09-27
  • 打赏
  • 举报
回复
laiyiling(【壮志雄心】)
中间有非数字字符号呢?
onedayonehole 2004-09-27
  • 打赏
  • 举报
回复
我觉得我的方法最简单
jordan023 2004-09-27
  • 打赏
  • 举报
回复
方法都不错。就看你能想到哪种方法了!
bluwindhrt 2004-09-27
  • 打赏
  • 举报
回复
//顺序
char s[] = "123456";
int len = strlen(s);
if(len == 0 || !isdigit(s[0]) || !isdigit(s[len-1])
return false;
int i=0;
while(i < len-1)
{
if(s[i+1] - s[i] != 1)
return false;
i++;
}
return true;

//倒序
char s[] = "123456";
int len = strlen(s);
if(len == 0 || !isdigit(s[0]) || !isdigit(s[len-1])
return false;
while(len>1)
{
if(s[len-1] - s[len-2] != 1)
return false;
len--;
}
return true;
Jimmy_Xia 2004-09-27
  • 打赏
  • 举报
回复
012345678910111213141516....
自己想法:(以下代码仅供参考)
CString szNum;
CString szCmpNum("012345678910111213");
int nCount = 0;
CString szMyNum;
while(1)
{
szNum.Format("%d", nCount);
szMyNum += szNum;
if(!szMyNum.IsEmpty() && szCmpNum.Find(szMyNum) != 0)
break;
if(szCmpNum.GetLength() <= szMyNum.GetLength())
break;
nCount ++;
}
nCount即连续的位数,如果szCmpNum和szMyNum长度相同,则标明他们完全相等。
代码没有验证!
Mr-Chen 2004-09-27
  • 打赏
  • 举报
回复
每位分离在顺序判断就行了
stoone 2004-09-27
  • 打赏
  • 举报
回复
onedayonehole兄厉害,pf!
onedayonehole 2004-09-27
  • 打赏
  • 举报
回复
有一个简便但不通用的方法
#include "StdAfx.h"
#include <STDLIB.H>
#include <string.h>

void main()
{
char s[] ="0123456789";
int i = 89;
char c[10] = {0};
itoa(i,c,10);
if(strstr(s,c)==NULL)
printf("Not Sequence");
else
printf("Is Sequence");
return;
}
事先定义一个字符串123456789,然后判断查找的字符串是否为它的字集
jdzwq 2004-09-27
  • 打赏
  • 举报
回复
楼主,该结贴了,再不结,这里成膏药铺了!
糊糊 2004-09-27
  • 打赏
  • 举报
回复
我的方法还不简单啊?
怎么可能不可行那?

7位就加"6543210"
6位就加"543210"

这怎么不可行了?
onedayonehole 2004-09-27
  • 打赏
  • 举报
回复
huyoo(空格键)
的方法思路也不错,
但是实际工程当中,好象不太可行

然后加上“6543210”
然后这个数,需要计算出来的
糊糊 2004-09-27
  • 打赏
  • 举报
回复
首先取得字符串的位数,比如“1234567”,是七位,然后加上“6543210”,结果就是“7777777”,
如果结果不是“7777777”,说明就不是顺序的~~

这个方法简单吧?

例如:“34562”,5位,就加上“43210”,结果不是“55555”,所以它不是顺序的,OK!

倒序的也是一样的,加上“012...”

应该大功告成了~~~~~
flyingakain 2004-09-26
  • 打赏
  • 举报
回复
有没有简便的算法?而不是这种循环判断呢!
Kudeet 2004-09-26
  • 打赏
  • 举报
回复
CString str="123456";
int len = str.GetLength();
//得到字符窜的长度
char chbegin = str.GetAt(0);
//得到第一个字符
char chend = str.GetAt(len-1);
//得到最后一个字符,比较第一个字符和最后一个字符的差值是否和len长度符合

flyingakain 2004-09-26
  • 打赏
  • 举报
回复
up
jdzwq 2004-09-25
  • 打赏
  • 举报
回复
/*拷贝回去试一试*/
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

char* NextToken(char* str,char** numat,int* numlen)
{
if(*str == '\0')
{
*numat = NULL;
*numlen = 0;
return NULL;
}

/*查找第一个数字*/
while(*str != '\0' && (*str < '0' || *str > '9'))
str ++;

if(*str == '\0')
{
*numat = NULL;
*numlen = 0;
return NULL;
}

*numat = str;
str ++;
/*查找最后一个数字*/
while(*str != '\0' && (*str >= '0' && *str <= '9' && (*str - 1) == *(str - 1)))
str ++;

*numlen = str - *numat;
return str;
}

int main(int argc, char* argv[])
{
char str[100];
char* next;
char* token;
char* numat;
int numlen;

strcpy(str," ancd 12e3 345.345 26546ggdc123456 987789");
printf("%s\n",str);

next = str;
while(next = NextToken(next,&numat,&numlen))
{
token = (char*)calloc(numlen + 1,sizeof(char));
strncpy(token,numat,numlen);
printf("%s\n",token);
free(token);
}

return 0;
}

lb2261981 2004-09-25
  • 打赏
  • 举报
回复
楼上已经讲得很清楚了,
楼主也会的吧
hzhxxx 2004-09-25
  • 打赏
  • 举报
回复


1. 首先看是不是数字,看这个字符串能不能转换为数字

2. 然后取出开始的,循环判断 前面的一个 + 1是不是等于后面的那个
oyljerry 2004-09-25
  • 打赏
  • 举报
回复
一位位的读,然后判断

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧