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

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

给出一段C/C++代码,希望有帮助。
#include "stdafx.h"
#include "stdio.h"
#include "string.h"//
#include "stdlib.h"
void main(void){
char Str[100]="a123*456 17960??",flag=0,l=0,pA[10]={NULL,},ln=0;
int Num[20],n=0,len;

printf("请输入一个各种字符间隔等混合字符串!
Str=");
gets(Str);
len=strlen(Str)+1;
for(int i=0;i<len;i++){
if(flag && (Str[i]'9')){
Num[ln++]=atoi(pA);
flag=0;
strset(pA,NULL);
l=0;
n++;
}
else if(Str[i]>='0' && Str[i]<='9'){
pA[l++]=Str[i];
flag=1;
}
}
printf("
整数有%d个,它们是:",n);
for(i=0;i<ln;i++) printf("%d ",Num[i]);
printf("
");
}

第2个问题,有多个子串,返回第几个子串的位置??=
以下代码VC6.0测试通过:
#include
#include
#include
#define MAXLINE 81
int getNumber(const char* str, int *&pi)
{
if( str==NULL || strlen(str)==0 ) return 0;
int i = 0;
int n = 0; // 包含整数子串的个数
char *tmp = (char*)calloc( strlen(str) + 1, sizeof(char) );
char *p = tmp;
while(*str++ != '\0' )
{
if( *str>='0' && *str<='9' )
{
if( *p=='|' )
{
p++;
n++;
}
*p++ = *str;
}
else
*p = '|';
}
*p = '\0';
n++;
pi = (int*)calloc(n, sizeof(int));
p = strtok(tmp, "|");
while( p != NULL )
{
*(pi + i++) = atoi( p );
p = strtok( NULL, "|" );
}
return n; // 返回的是包含整数数值的个数
}
int main(int argc, char* argv[], char* env[])
{
int *pi = NULL;
char str[MAXLINE] = {0};
int n = 0, i = 0;
printf("请输入一个包含整数的字符串:
");
gets(str);
n = getNumber( str, pi );
printf( "共包含 %d 个整数数值:
", n );
for( i = 0; i < n; i++ )
printf(" %d
", *(pi + i) );
free(pi);
return 0;
}
输入:
132,568a79555+11151%125548&987113#11 46213
输出:
共包含 8 个整数数值:
32
568
79555
11151
125548
987113
11
46213

#include<iostream>
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<iostream>
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;
}

你想说什么 ?

表示 很纠结```


C语言。输入一个字符串,内有数组和非数字字符,将其中连续的数字作为一个...
include <stdio.h> include <math.h> void output(char *s, int n); \/\/定义输出函数 int main(){ char str[30];printf("Please enter string: "); \/\/输入字符串 gets(str);output(str, 30); \/\/调用输出函数 return 0;} \/\/输出函数 void output(char *s, int n){ char ...

输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整数...
{ int i,j,k,h,n=0;double sum=0;int a[10];\/\/定义一个数组存储每次检验得到的字符串中的整形数字 k=strlen(p1);\/\/计算出输入的字符串的长度 for (i=0,j=0;i<k;i++){ if(*(p1+i)>='0' && *(p1+i)<='9'){ a[j]=*(p1+i);j++;\/\/变量j用于记忆连续检测到的整数...

下面这个程序问题的解法,输入一个字符串,内有数字和非数字字符,例如...
include <stdio.h>int main(){ int i,j,L=0; char x[100]; int a[100]; int flag=0,temp=0; scanf("%s",&x); for(i=0;i<100;i++) { if(flag==1&&(x[i]>='0'&&x[i]<'9')) { temp=temp*10+(x[i]-'0'); } else if(flag==0&&(x[i...

输入一个字符串,内有数字和非数字字符。
string str = "a123x456+-_1234?3ki34jkk";var s= System.Text.RegularExpressions.Regex.Split(str,@"\\D").Where(t=>t.Trim()!="").ToList();foreach (var temp in s)Console.WriteLine(temp);

输入一个字符串,内有数字和非数字字符,将其中的数字作为一个整数,依次...
include<stdio.h>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...

输入一个字符串,内有数字和非数字字符,例如:“A123x456 17960? 302tab...
flag=1且不在if(*p>='0'&&*p<='9')条件中,执行else if(flag)将计算好的S放入数组a中。s的值就如321一样,百位(*p-48)*10*10(注意:*p-48是将字符化为整数)+十位(*p-48)*10+个位*p-48;最后那个if(flag)t[j++]=s是考虑到字符串最后是数字,没执行else if的情况。

输入一个字符串,串内有数字和非数字字符。例如:
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]>='0' && s[i]<='9'){sscanf(s+i,"%d%n",a+j++,&n);i+=n-1;}printf("\\nIn your input string detected %d integers.\\nThey are:"...

输入一个字符串,内有数字和非数字字符。
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...

请进来看我的程序,题目为:输入一个字符串,内有数字和非数字字符。
include<stdio.h>#include <string.h>#define MAX_LONG 100 \/\/ 假设字符串最长为100#define MAX_DIGITS 20 \/\/ 假设最多有20组数字static int digits[MAX_DIGITS]; \/\/定义静态全局数组用于存放数字static int index=0; \/\/记录有效数字的组数 void get_digits(char a[],int len){ int...

1.输入一个字符串(不超过50个字符),内有数字和非数字字符 ,如: a
include <stdio.h>#include "string.h"int main(void){ char s[51]; int d[25],i,j,k; printf("Please enter a string, the length <= 50...\\ns="); if(!gets(s) && strlen(s)>50){ printf("Input error, exit...\\n"); return 0; } for(j=i=...

西安区15223991403: 输入一个字符串,串内有数字和非数字字符.例如: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...

西安区15223991403: 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)...

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

西安区15223991403: 输入一个字符串,串内有数字和非数字字符.例如: -
居些祖师: 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]>...

西安区15223991403: 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, ...

西安区15223991403: 求下列程序用指针实现输入一个字符串,内有数字字符和非数字字符,如123a345bcd567,将其中连续的数字作为一个整数,依次存放到一数组a中,如123... -
居些祖师:[答案] type pt=^note; note=record data:longint; next:pt; end; var p,h:pt; ch:char; s:string; code,a:integer; begin s:=''; a:=9; repeat read(ch); until (ord(ch)>=48)and(ord(ch)=48)and(ord(ch)

西安区15223991403: 输入一个字符串,内有数字和非数字字符,将其中的数字作为一个整数,依次存放在数组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("...

西安区15223991403: 输入一个字符串,这个字符串包含了数字和非数字字符.例如: -
居些祖师: #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]); }

西安区15223991403: c程序设计答案输入一个字符串,内有数字和非数字字符,例如 “a123bcd45ef078bc” 1.将其中连续的数字作为 -
居些祖师: 输入一个字符串,串内有数字和非数字字符.例如:abc456 sd78fd123s 789df,#define MAXLEN 128 int main(int argc,char* argv[]) { char a[]=",zVXTEI

西安区15223991403: 输入一字符串,内有数字和非数字,如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=...

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