70,034
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
#define LEN sizeof(char)
void main()
{
char str[N],**p,temp[N];
int i,j,flag,i_p=0,i_num=0,len_str;
printf("请输入一个含有数字的字符串:\n");
gets(str);
len_str=strlen(str);
for(i=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(i==0)
i_num++;
else if(str[i-1]<'0'||str[i-1]>'9')
i_num++;
}
}
printf("共有%d个数字\n",i_num);
/*把数字存数组去*/
p=(char **)calloc(i_num,LEN);
for(i=0,j=0,flag=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
flag=1;
else flag=0;
if(flag==1)
temp[j++]=str[i];
if(flag==0||i==len_str-1)
{
if(i==0) continue;
else if((str[i-1]>='0'&&str[i-1]<='9')||i==len_str-1)
{
temp[j]='\0';
p[i_p]=(char *)calloc(N,LEN);
strcpy(p[i_p],temp);
i_p++;
j=0;
}
}
}
/*output*/
printf("含有的数字如下:\n");
for(i_p=0;i_p<i_num;i_p++)
printf("%s\n",p[i_p]);
/*free*/
for(i=0;i<i_num;i++)
free(p[i_p]);
free(p);
}
p=(char **)calloc(i_num,LEN);
p=(char **)calloc(i_num,sizeof(char *));
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
#define LEN sizeof(char)
void main()
{
char str[N],**p,temp[N];
int i,j,flag,i_p=0,i_num=0,len_str;
printf("请输入一个含有数字的字符串:\n");
gets(str);
len_str=strlen(str);
for(i=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(i==0)
i_num++;
else if(str[i-1]<'0'||str[i-1]>'9')
i_num++;
}
}
printf("共有%d个数字\n",i_num);
/*把数字存数组去*/
p=(char **)calloc(i_num,LEN);
for(i=0,j=0,flag=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
flag=1;
else flag=0;
if(flag==1)
temp[j++]=str[i];
if(flag==0||i==len_str-1)
{
if(i==0&&i!=len_str-1) continue;
if((str[i-1]>='0'&&str[i-1]<='9')||i==len_str-1)
{
temp[j]='\0';
p[i_p]=(char *)calloc(N,LEN);
strcpy(p[i_p],temp);
i_p++;
j=0;
}
}
}
/*output*/
printf("含有的数字如下:\n");
for(i_p=0;i_p<i_num;i_p++)
printf("%s\n",p[i_p]);
/*不确定是不是这下面的代码出的问题,但是只要删掉程序就正常了*/
for(i_p=0;i_p<i_num;i_p++)
free(p[i_p]);
//free(p);这行必须注释,否则连输入一个含数字的字符串"1"都会出问题
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
#define LEN (sizeof(char))
int main()
{
char str[N];
char **p;
char temp[N];
int i;
int j;
int flag;
int i_p=0;
int i_num=0;
int len_str;
printf("请输入一个含有数字的字符串:\n");
gets(str);
len_str=strlen(str);
for(i=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(i==0)
i_num++;
else if(str[i-1]<'0'||str[i-1]>'9')
i_num++;
}
}
printf("共有%d个数字\n",i_num);
/*把数字存数组去*/
p=(char **)calloc(i_num,sizeof(char *)); //用来存放指针的
for(i=0,j=0,flag=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
flag=1;
else flag=0;
if(flag==1)
temp[j++]=str[i];
if(flag==0||i==len_str-1)
{
if(i==0) continue;
else if((str[i-1]>='0'&&str[i-1]<='9')||i==len_str-1)
{
temp[j]='\0';
p[i_p]=(char *)calloc(N,LEN);
strcpy(p[i_p],temp);
i_p++;
j=0;
}
}
}
//版本2
char *p2[i_num];
i_p = 0;
for (i = 0; i < len_str; i++) {
if (str[i] >= '0' && str[i] <= '9') {
p2[i_p] = malloc(N * LEN);
j = 0;
while (str[i] >= '0' && str[i] <= '9') {
p2[i_p][j++] = str[i++];
}
p2[i_p++][j] = '\0';
}
}
/*output*/
printf("含有的数字如下:\n");
for(i_p=0;i_p<i_num;i_p++){ //不是i,而是i_p
printf("%s\n",p[i_p]);
printf("%s\n", p2[i_p]);
}
/*free*/
for(i_p=0;i_p<i_num;i_p++) {
free(p[i_p]);
free(p2[i_p]);
}
free(p); //不用free(p2),至于为什么,自己想
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
#define LEN (sizeof(char))
int main()
{
char str[N] = "12 3 4 2 d c d,,vr444444444444 24";
char **p;
char temp[N];
int i;
int j;
int flag;
int i_p=0;
int i_num=0;
int len_str;
printf("请输入一个含有数字的字符串:\n");
//gets(str);
len_str=strlen(str);
for(i=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(i==0)
i_num++;
else if(str[i-1]<'0'||str[i-1]>'9')
i_num++;
}
}
printf("共有%d个数字\n",i_num);
/*把数字存数组去*/
p=(char **)calloc(i_num,sizeof(char *)); //用来存放指针的
for(i=0,j=0,flag=0;i<len_str;i++)
{
if(str[i]>='0'&&str[i]<='9')
flag=1;
else flag=0;
if(flag==1)
temp[j++]=str[i];
if(flag==0||i==len_str-1)
{
if(i==0) continue;
else if((str[i-1]>='0'&&str[i-1]<='9')||i==len_str-1)
{
temp[j]='\0';
p[i_p]=(char *)calloc(N,LEN);
printf("%s\n", temp);
strcpy(p[i_p],temp);
i_p++;
j=0;
}
}
}
//版本2
char *p2[i_num];
i_p = 0;
for (i = 0; i < len_str; i++) {
if (str[i] >= '0' && str[i] <= '9') {
p2[i_p] = malloc(N * LEN);
j = 0;
while (str[i] >= '0' && str[i] <= '9') {
p2[i_p][j++] = str[i++];
}
p2[i_p++][j-1] = '\0';
}
}
/*output*/
printf("含有的数字如下:\n");
for(i_p=0;i_p<i_num;i_p++){ //不是i,而是i_p
printf("%s\n",p[i_p]);
printf("%s\n", p2[i_p]);
}
/*free*/
for(i_p=0;i_p<i_num;i_p++) {
free(p[i_p]);
free(p2[i_p]);
}
free(p); //不用free(p2),至于为什么,自己想
return 0;
}
#include <iostream>
#include <string>
#define SIZE 10
using namespace std;
bool IsDigit(char ch)//判断某个字符是否是数字字符
{
if (ch>='0'&&ch<='9')
{
return true;
}
else
{
return false;
}
}
void CopySubStr(char *str,int start_idnex,int end_index,string &num)//将str的start_index,end_index之间的字符复制到num中
{
int i;
for (i=start_idnex;i<=end_index;i++)
{
num=num+str[i];
}
}
void Opt(char *data,string *str_group,int &str_count)//整体操作
{
int i,j;
int start_index,end_index;
int data_length=0;
while (data[data_length]!='\0')
{
data_length++;
}
for (i=0;i<data_length;i++)
{
if (IsDigit(data[i]))
{
start_index=i;
while (IsDigit(data[++i]));
end_index=i-1;
CopySubStr(data,start_index,end_index,str_group[str_count]);
str_count++;
}
}
}
int main()
{
string str_group[SIZE];//用于存储提取的数字
int str_count=0;//对数字的个数计数
char data[256];//输入的字符串
gets(data);
Opt(data,str_group,str_count);
cout<<endl;
cout<<str_count<<" number :"<<endl;
for (int i=0;i<str_count;i++)//输出提取到的数字
{
cout<<str_group[i]<<" ";
}
cout<<endl;
return 0;
}