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

作者&投稿:妫咬 (若有异议请与网页底部的电邮联系)
【C语言】问题求助:输入一个字符串,内有数字和非数字字符,~

第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

其实不是很复杂,但是不能直接很容易的读入一个整数了。
程序就不贴了,大概讲一下思路吧。
你得手工一个一个读入字符,然后准备一个int,比如是now,默认是-1;
每读入一个char,判断是否是'0'-'9'之间的数字,如果是,那么说明这个数字是跟在now这个东西的后面的,比如读入了'3',而now是24,说明至少这个值应该是243.但是第一次得判断一下,如果这个时候now是-1,说明现在碰到的数字是第一位的数字,如果遇到了3,now应该变成3.
如果读入的不是'0'-‘9‘,那么当前的now就是一个已经取得的值了(如果now不是-1的话),把now放到你的答案数组里就好了,然后记得把now重新变成-1。

为什么初始化的时候now要赋成-1,是因为可能一堆数字里有0的问题,你可以考虑一下这个问题。还有以上的做法没有考虑负数的问题,但总的思路是一样的。
一句话概括,手工读字符,手工来组合数字判断断点。

给出一段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("请输入一个各种字符间隔等混合字符串!\nStr=");
gets(Str);
len=strlen(Str)+1;
for(int i=0;i<len;i++){
if(flag && (Str[i]<'0' || 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("\n整数有%d个,它们是:",n);
for(i=0;i<ln;i++) printf("%d ",Num[i]);
printf("\n");
}

#include <iostream>
#include <string>
#include <vector>
using namespace std;

//因使用了string,cin,cou,vector,c无法编译
//一个简单的算法,对于字符串,设定一个指针,程序中的start
//第一个while循环查找直到是字符0-9之间的数,找到以后,使用atoi转换为数字存入vector中
//第二个while循环查找知道不是字符0-9的数字,即跳过刚转换过的字符,继续查找,直到找完
void fun(vector<int> &vInt, const string &str)
{
int len = str.length();
int start=0;
while (start<len)
{
if (str.at(start)>='0' && str.at(start)<='9')
{
vInt.push_back(atoi(str.substr(start,str.length()-start).c_str()));
while(start<len)
{
if(str.at(start)<'0' || str.at(start)>'9')
break;
start++;
}
}
start++;
}
}

int main(int argc, char* argv[])
{
string str;
vector<int> vInt;
cin>>str;
int len = str.length();

fun(vInt,str);

cout<<"整数个数: "<< vInt.size()<<endl;
for (int i=0;i<vInt.size();i++)
{
cout<<vInt.at(i)<<endl;
}

return 0;
}

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


C语言 从键盘输入一个字符串内有小写字母和数字字符编程将其中每个由连...
include<stdio.h>int main(void){ char c='N',s[300],*p; gets(s); for(p=s; *p; p++) { while(*p>='a'&&*p<='z') { putchar(*p++); c='Y'; }; if(c=='Y') { putchar('\\n'); c='N'; } } return 0;} ...

输入一个字符串,串内有数字和非数字字符。例如:abc456 sd78fd123s...
\/\/保存在str字符数组中 str[n]=a[j];n++;} else break;} str[n]='\\0';\/\/调用将字符串转换成长整型的函数 b[k]=strtol(str,NULL,10); \/\/NULL表示将清走的字符是否保存 10为base 为基数,这里表示输出十进制 printf("b[k]=%d\\n",b[k]);k++; \/\/将k自增,表示下一个元素...

速求 输入一个字符串,内有数字和和非数字字符
buff1[nBuffIndex] = buff[i];buff1[nBuffIndex+1] = '\\0';nBuffIndex++;} else if(nBuffIndex != 0){ numbers[nNumIndex++] = atoi(buff1);buff1[0] = '\\0';nBuffIndex = 0;} } printf("总共有%d个数字,分别是:\\n",nNumIndex);for(i=0; i<nNumIndex; i++)printf(...

输入一个字符串,长度不超过30,内有数字字符和非数字字符,统计其中包含...
输入一个字符串,长度不超过30,内有数字字符和非数字字符,统计其中包含了多少个非负整数,并输出这样的非负整数。关于输入一个字符串,最大长度为30关于输出输出字符串中包含的数据,... 输入一个字符串,长度不超过30,内有数字字符和非数字字符,统计其中包含了多少个非负整数,并输出这样的非负整数。关于输入一个...

【C语言】问题求助:输入一个字符串,内有数字和非数字字符,
return n; \/\/ 返回的是包含整数数值的个数 } int main(int argc, char* argv[], char* env[]){ int *pi = NULL;char str[MAXLINE] = {0};int n = 0, i = 0;printf("请输入一个包含整数的字符串:\\n");gets(str);n = getNumber( str, pi );printf( "共包含 %d 个整数...

求字符串中的数字 输入一个字符串,内有数字和非数字字符,如:ak123x45...
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();} ...

输入一个字符串长度不超过30内有数字字符和非数字字符统计其中包含了...
{ if((str[i]<='9')&&(str[i]>='0')){ if(j==0) {printf("\\n");j=1;} printf("%c",str[i]);} else if(i&&(str[i-1]<='9')&&(str[i-1]>='0'))j=0; \/\/有改动 } if(j==1) \/\/有改动 printf("\\n");return 0;} ...

输入一个长度不超过30的字符串,内有数字字符和非数字字符(不包括...
我估计是题目要求你求出这个整数,而不是仅输出。另外,在for循环中使用i做循环变量,在循环体中又对i进行自加运算,容易导致循环控制出问题,增加了程序出错几率。建议修改程序如下,另另外你的程序并未统计输出数据的个数并输出:int main() { int i, k = 0,x=0,b=0; char s[40];cin....

c++输入字符串,内有数字和非数字字符,如a123*456将其中连续数字作为一...
include <iostream>#include <sstream>#include <vector>#include <algorithm>int* ParseInt(const char* s, int* len) { std::stringstream ss(s); int v; std::vector<int> r; for(;;) { if (ss >> v) r.push_back(v); else { char c; ss.clear()...

输出一字符串,内有数字和非数字字符,如何将其中连续的数字作为一个整数...
digit_flag = 1;split[split_count] = pos;split_count++;} } else { digit_flag = 0;pos = '\\0';} pos++;} for (split_index = 0; split_index < split_count; split_index++){ number[number_count] = atoi(split[split_index]);number_count++;} printf("number count: %d...

府谷县18059155606: 输入一个字符串,串内有数字和非数字字符.例如: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...

府谷县18059155606: 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)...

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

府谷县18059155606: 输入一个字符串,串内有数字和非数字字符.例如: -
冷翰苯磺: 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]>...

府谷县18059155606: 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, ...

府谷县18059155606: 求下列程序用指针实现输入一个字符串,内有数字字符和非数字字符,如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)

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

府谷县18059155606: 输入一个字符串,这个字符串包含了数字和非数字字符.例如: -
冷翰苯磺: #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]); }

府谷县18059155606: c程序设计答案输入一个字符串,内有数字和非数字字符,例如 “a123bcd45ef078bc” 1.将其中连续的数字作为 -
冷翰苯磺: 输入一个字符串,串内有数字和非数字字符.例如:abc456 sd78fd123s 789df,#define MAXLEN 128 int main(int argc,char* argv[]) { char a[]=",zVXTEI

府谷县18059155606: 输入一字符串,内有数字和非数字,如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=...

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