输入一个字符串,内含数字和非数字字符

作者&投稿:滕欢 (若有异议请与网页底部的电邮联系)
输入一个字符串,串内有数字和非数字字符。例如:~

#include "stdio.h"#include "string.h"int main(int argv,char *argc[]){char s[100];int a[100],i,j,n,ln;printf("Please enter an arbitrary string with Numbers:
");fgets(s,100,stdin);for(ln=strlen(s),j=i=0;i='0' && s[i]<='9'){sscanf(s+i,"%d%n",a+j++,&n);i+=n-1;}printf("
In your input string detected %d integers.
They are:",j);for(i=0;i<j;printf("%d ",a[i++]));printf("

");return 0;}运行举例:

#include "stdio.h"#include "string.h"int main(int argv,char *argc[]){char s[100];int a[100],i,j,n,ln;printf("Please enter an arbitrary string with Numbers:
");fgets(s,100,stdin);for(ln=strlen(s),j=i=0;i='0' && s[i]<='9'){sscanf(s+i,"%d%n",a+j++,&n);i+=n-1;}printf("
In your input string detected %d integers.
They are:",j);for(i=0;i<j;printf("%d ",a[i++]));printf("

");return 0;}运行举例:

下面这个循环是将字符串中的数字取出,例如字符串ads1sfdsf23dfdf,则a[0]=1,a[1]=23
for(i=0; *(p+i)!='\0'; i++)
{
if(*(p+i)>='0'&&*(p+i)<='9')//p[i]是0~9之间的字符,也就是数字字符
{
b=*(p+i)-48+b*10;//b=(p[i]-48)+b*10 (p[i]-48)是将p[i]转换成字符转换成对应的数字。
if (*(p+i+1)<'0'||*(p+i+1)>'9')//如果p[i]的下一个字符不是数字字符,则将p[i]写入到a[i]中。如果p[i]的下一个字符是数字字符,则将p[i]*10与下一位数字相加。即连续的数字字符,作为一个整数处理
{
a[j]=b;
j++;
b=0;
}
}
}

首先*(p+i)就等于p[i],你可以把p类比成一个数组
48就是字符'0'的ascii码
这里的意思就是用来将一个个数字字符拼成一个整数

比如有4 5 6这三个字符,其ascii码分别是52 53 54,p指向4
b假设原来是0,b = *(p+0) - 48 + b*10= 52 - 48 = 4
第二次:b = *(p+1) - 48 + b*10= 53 - 48 + 4*10 = 5+40 = 45
第三次:b = *(p+2) - 48 + b*10= 53 - 48 + 45*10 = 6+450 = 456

懂了吧

#include
using namespace std;
int main()
{
char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;
cout<<"input a string:"<<endl;
gets(str);
cout<<endl;
pstr=&str[0];
pa=&a[0];
ndigit=0;
i=0;//i代表字符串的第几个字符
j=0;//j代表连续数字的位数
while(*(pstr+i)!='\0')//字符串不等于结束符
{
if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))//如果pstr指向0~9
j++;//j一个个输出
else
//大家帮一下忙用通俗的语言解释一下下面;
{
if(j>0)
{
digit=*(pstr+i-1)-48;//将单个字符0-9a scII码转换为整数型0-9 数值给digit
k=1;//k代表 查找到连续数字的倒数第几个字符串
while(k<j)
{
e10=1;//e10代表1*10^(次方)
for(m=1;m<=k;m++)
e10=e10*10;//每个循环*10
digit=digit+(*(pstr+i-1-k)-48)*e10;
k++;

/*
比如说有3个连续的字符串是123,此循环是倒序循环查找数字字符
digit与e10的值变化
e10的值是1,digit=3 , 在上一步已经给他两个赋值了

循环1 e10=e10*10 e10的值是10,读取第二个字符2转化为整数后*e10 赋值给digit
digit=23
循环2 e10=e10*10 e10的值是100,读取第二个字符1转化为整数后*e10 赋值给digit
digit=123
*/

}
*pa=digit;
ndigit++;
pa++;
j=0;
}
}
i++;
}
if(j>0)
{
digit=*(pstr+i-1)-48;
k=1;
while(k<j)
{
e10=1;
for(m=1;m<=k;m++)
e10=e10*10;
digit=digit+(*(pstr+i-1-k)-48)*e10;
k++;
}
*pa=digit;
ndigit++;
j=0;
}
printf("there are %d numbers in this line. they are:\n",ndigit);
j=0;
pa=&a[0];
for(j=0;j<ndigit;j++)
cout<<*(pa+j)<<endl;
cout<<endl;
return 0;
}

此代码略显臃肿,可以这么写
代码越简洁,出错的概率越小,也越容易管理和修改
#include
using namespace std;
int main()
{
char str[50],*pstr,z;
int i,j,k,e10,digit,ndigit,a[10],*pa;
cout<<"input a string:"<<endl;
gets(str);
cout<<endl;
pstr=&str[0];
pa=&a[0];
ndigit=0;
i=0;//i代表字符串的第几个字符
j=0;//j代表连续数字的位数
while((*(pstr+i)!='\0')||(j>0))//字符串不等于结束符
{
if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))//如果pstr指向0~9
{
j++;//j一个个输出
i++;
}
else if(j>0)
{
digit=0;
e10=1; //10的次方用于表示字符的个十百千万
for(k=1;k<=j;k++)//k代表 查找到连续数字的倒数第几个字符串
{
digit+=(*(pstr+i-k)-48)*e10;
e10=e10*10;
}
*pa=digit;
ndigit++;
pa++;
j=0;
}else i++;
}
printf("共有 %d 个连续的整数:\n",ndigit);
j=0;
pa=&a[0];
for(j=0;j<ndigit;j++)
cout<<*(pa+j)<<endl;
cout<<endl;
return 0;
}

b=*(p+i)-48+b*10,就是计算数字字符的整数值

*(p+i)从p指向字符串中取出第i个字符;
- 48: 48是'0'的ASCII字符值,-48就是获取数字字符的数值,如:'0'- 48= 0, '9' - 48 = 9;
+b*10,将上次计算结果进位再累加

后面的代码就是计算好的整数b放到数组a中,最后打印输出


用java编写计算器
class Oper \/\/ 对一个含+ - * \/字符串求值{ public String operator(String s) { boolean flag = true; boolean flag2 = false; int i, n = 0; String chr = new String(), theta = ""; double number1 = 0, number2 = 0; Stack oprstack = new Stack(); oprstack.push("="); Stack ...

vf中的替换命令,怎么替换其中一个特定字符?
Replace for at('?', 学号)>0 学号 with strtran(学号, '?', '')

c++中c_str()用法,越详细越好。
应该这样用:char c[20];string s="1234";strcpy(c,s.c_str());这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作。语法: const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.,这是为了与c语言兼容,在c语言中没有string类型,故必须...

“0x???”指令引用的“0x???”内存,该内存不能为“written 请问怎么解 ...
1、使用系统自带的sfc命令,修复受到损坏的系统文件恢复到正常状态。 开始→运行→输入cmd,打开“命令提示符”窗口→输入字符串命令sfc\/scannow→回车→耐心等待命令程序对每个系统文件搜索扫描→一旦发现系统文件的版本不正确或者系统文件已经损坏→它就能自动弹出提示界面→要求插入Windows系统的安装光盘→从中提取正常的...

下面c++代码中,**p什么意思、p和q显示的地址为什么一样、&p和&q表示...
然后,接受用户输入的单词,并显示出来,使用malloc并回答第一个问题(即要输入多少个单词)创建一个动态数组,该数组内含相应的指向char的指针 (注意,由于数组的每个元素都是指向char的指针,所以用于储存malloc返回值的指针应该是一个指向指针的指针)。在读取字符串时,该程序应该把单词读入一个临时的...

名侦探柯南迷 柯南里的所有常识,谁知道?
Code 128: 表示高密度数据, 字符串 字符串可变长 符号内含校验码 有三种不同版本: A, B, and C 可用128个字符分别在 A, B, or C 三个字符串集合中 用于工业、仓库、零售批发 Interleaved 2-of-5 (I2 of 5): 只能表示数字0 -9 可变长度 连续性条形码,所有条与空都表示代码,第一个数字由条开始,...

想找一些java的带讲解的基础练习题
Java没有函数,作为一个比c十十更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。 8 字符串 c和c十十不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类...

高手请这边走
传回一个已知的加密机码。 1304 0x0518 nt 密码太复杂,无法转换成 lan manager 密码。传回的lan manager密码是一个空 字符串。 1305 0x0519 修正层次不详。 1306 0x051a 表示两个修订阶层不兼容。 1307 0x051b 此安全识别码无法指定为这个对象的拥有者。 1308 0x051c 此安全识别码无法指定为主要的对象群组...

硬盘逻辑锁是什么
1. 首先准备一张启动盘,然后在其他正常的机器上使用二进制编辑工具(推荐UltraEdit)修改软盘上的IO.SYS文件(修改前记住先将该文件的属性改为正常),具体是在这个文件里面搜索第一个“55AA”字符串,找到以后修改为任何其他数值即可。用这张修改过的系统软盘你就可以顺利地带着被锁的硬盘启动了。不过这时由于该硬盘...

access数据库, group by 一个字段(jhwgqk)统计数字,但它居然空白的分...
在表中有的记录 jhwgqk 字段没有输入任何值 另外一部分记录或能内含一个长度为0的字符串

上饶县13148841974: 输入一个字符串,串内有数字和非数字字符.例如:abc456 sd78fd123s 789df,将其中连续的数字作为一个整数,依次存放到另一个整型数组b中.例如上述... -
杜诞山海:[答案] #include #include #define MAXLEN 128int main(int argc,char* argv[]){char a[]="b123,0456 7890a"; //将非字符的数清早,相邻的数字当成整数输出long int b[MAXLEN]={0};// char c[MAXLEN];char str[MAXL...

上饶县13148841974: c语言编程实现:输入一个字符串,内有数字和非数字符号 -
杜诞山海: #include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>int main() {int d[256]; char s[256]="a123x456"; int i,j,len=strlen(s); for(i=0,j=0;i<len;i++) { if(isdigit(s[i])) { d[j++]=atoi(&s[i]); while(isdigit(s[i])) i++; } } printf("total = %d\n",j)...

上饶县13148841974: 输入一个字符串,内有数字和非数字字符, -
杜诞山海: #include <iostream> #include <string> #include <vector> using namespace std;//因使用了string,cin,cou,vector,c无法编译 //一个简单的算法,对于字符串,设定一个指针,程序中的start //第一个while循环查找直到是字符0-9之间的数,找到以后...

上饶县13148841974: 输入一个字符串,串内有数字和非数字字符.例如: -
杜诞山海: 1234567891011121314151617 #include "stdio.h"#include "string.h" intmain(intargv,char*argc[]){ chars[100]; inta[100],i,j,n,ln; printf("Please enter an arbitrary string with Numbers:\n"); fgets(s,100,stdin); for(ln=strlen(s),j=i=0;i<ln;i++) if(s[i]>...

上饶县13148841974: C++输入一个字符串,串内有数字和非数字字符求整数 -
杜诞山海: #include<iostream> #include<sstream> #include<iterator> #include<vector> #include<algorithm> using namespace std; bool f(int c){return !isdigit(c);} size_t extract(string s, vector<int> &v){replace_if(s.begin(), s.end(), f, ' ');istringstream iss(s, ...

上饶县13148841974: 输入一个字符串,这个字符串包含了数字和非数字字符.例如: -
杜诞山海: #include void main() { char b[]="a123x456 17960?"; int a[20]={0},len=strlen(b),i,j=1,k=-1; for(i=0;i printf("%d: ",a[i]); for (i=0;i { if(b[i]=48){ a[k]=a[k]*10+b[i]-48;} else {k++;} } k=20; for(i=0;i if (a[i]==0) {for(j=i;j for(i=0;i printf("%d\n",a[i]); }

上饶县13148841974: 输入一字符串,内有数字和非数字,如a123x456 17960? 302tab5876.试将其中连续的数字作为一个整数,依次存 -
杜诞山海: #include int main() { int i,j,l=0; char x[100]; int a[100]; int flag=0,temp=0; file *p1=fopen("x.txt","r"); if(!p1) printf("打开失败\n"); for(i=0;i<100;i++) { fscanf(p1,"%c",&x[i]); if(flag==1&&(x[i]>='0'&&x[i]<'9')) { temp=temp*10+(x[i]-'0'); } else if(flag=...

上饶县13148841974: 输入一个字符串,内有数字和非数字字符,将其中的数字作为一个整数,依次存放在数组a中,统计共有多少 -
杜诞山海: #include int main( ) {char s[50];int a[50];int count=0,i;printf("请输入字符串:");scanf("%s",s);for(i=0;s[i]!='\0';i++){if((s[i]>='0') && (s[i]<='9')){a[count++] = s[i]-'0';}}if(count ==0){printf("没有数字!\n");}else{printf("...

上饶县13148841974: .输入一个字符串,串内有数字和非数字字符,例如,“abc2345 345fdf678 jdhfg945”.将其中连续的数字作为 -
杜诞山海: using System.Text.RegularExpressions; List<string> P(string ins) { List<string> lst=new List<string>(); MatchCollection grp=Regex.Matches(ins, @"(\d+)"); foreach (Match m in grp) { lst.Add(m.Groups[1].Value); } return lst; }

上饶县13148841974: 求字符串中的数字 输入一个字符串,内有数字和非数字字符,如:ak123x456 17960?302gef4563#,以“#”作为 -
杜诞山海: #include <stdio.h> #include <conio.h> void main() {int cout=0;char c;printf("Input String:");scanf("%c", &c);while (c != '#'){if (c <= '9' && c >= '0'){cout++;}scanf("%c", &c);}printf("\nIn total: %d", cout);getch(); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网