事情是这么个事情
输入一个字符串,有数字和非数字字符,比如a12x?sh56,连续的数字作为一个整数,依次放入一个数组a中,最后输出数字个数和所有的数字
大佬救命
#include<iostream>
#include<cstring>
using namespace std;
int main() {
char s[100];
int num[100], l = 0, i, f = 0, a = 0;
cin.getline(s,100);
int len = strlen(s);
int len = strlen(s);
for(i = 0; i < len; i++) {
if(s[i] >= '0' && s[i] <= '9') {
f = 1;
a = a * 10 + (s[i] - '0');
} else {
if(f == 1) {
num[l++] = a;
f = 0;
a = 0;
}
}
}
if(f == 1) {
num[l++] = a;
}
cout<<l<<"个\n"<<endl;
for(i = 0; i < l; i++) {
cout<<num[i]<<" ";
}
return 0;
}
一个又臭又长的实现,还不一定正确,仅供参考:
#include <iostream>
using namespace std;
int main(){
char str[256];
cin>>str;
int numberNums =0; //数字个数
int number[100]; //存放数字的数组
int i = 0; //字符串临时下标
int numberStart = 0; //数字是否开始的标记
char num [10] ; //数字临时存储字符数组
int j = 0; //数字临时存储数组下标
int k = 0; //数字数组下标
for(k=0;k<10;k++){
num[k] = 'n';
}
for(k=0;k<100;k++){
number[k] = 0;
}
k=0;
if(str[i]>='\0'&&str[i]<='9'){
numberStart==1;
}else{
numberStart=0;
}
while(str[i]!='\0'){
//如果一个数字开始了
if(str[i]>='\0'&&str[i]<='9'&&numberStart==1){
num[j++] = str[i];
cout<<"数字开始:"<<str[i]<<endl;
}
if(str[i]>='\0'&&str[i]<='9'&&numberStart==0){
num[j++] = str[i];
numberStart=1;
cout<<"数字开始:"<<str[i]<<endl;
}
//如果一个数字结束了
if((str[i]<'\0'||str[i]>'9')&&numberStart==1){
j = 0;
numberNums++;
numberStart=0;
int p = 1;
for(int t=0;t<10;t++){
if(num[t]!='n'){
p*=10;
}
}
p/=10;
for(int t=0;t<10;t++,p/=10){
if(num[t]!='n'){
cout<<endl;
number[k]+=(num[t]-'0')*p;
cout<<"t="<<t<<",p="<<p<<",num["<<t<<"]="<<num[t]<<",number["<<k<<"]="<<number[k];
cout<<endl;
num[t] = 'n';
}
}
cout<<"一个数字结束:"<<number[k]<<endl;
k++;
}
i++;
}
//如果一个数字结束了
if(numberStart==1){
j = 0;
numberNums++;
int p = 1;
for(int t=0;t<10;t++){
if(num[t]!='n'){
p*=10;
}
}
p/=10;
for(int t=0;t<10;t++,p/=10){
if(num[t]!='n'){
cout<<endl;
number[k]+=(num[t]-'0')*p;
cout<<"t="<<t<<",p="<<p<<",num["<<t<<"]="<<num[t]<<",number["<<k<<"]="<<number[k];
cout<<endl;
num[t] = 'n';
}
}
cout<<"一个数字结束:"<<number[k]<<endl;
}
cout<<"数字个数:"<<numberNums<<endl;
for(i=0;i<100;i++){
if(number[i]!=0){
cout<<number[i]<<'\t';
}
}
return 0;
}