比如说:“djfkdjfkjg123dafddf123456”
查找出这个字符串中 最长的数字字符串是 6位 并输出123456
15 个解决方案
#1
很早以前写过的一个小程序,随便简单改了一下来解决你的问题:
输出:
//=================================================================
#include <string.h>
#include <iostream.h>
void my_strcat(char output[],char input[],int from,int to)
{
int i=from;
static count = 0;
while (i<=to)
{
output[count] = input[i];
input[i] = ' ';
i++;
count++;
}
output[count] = ' ';
count++;
}
int sort_string(char input[],char output[])
{
int beg,end,len,is_last_char,i,max,from,to;
beg=end=len=is_last_char=i=max=from=to = 0;
max = 0;
while (1)
{
if( input[i]>='1' && input[i]<='9')
{
if (is_last_char==1)
{
len++;
}
else
{
beg = i;
}
is_last_char = 1;
}
else
{
if (is_last_char==1)
{
end = i-1;
if (len>max)
{
max = len;
from = beg;
to = end;
}
}
len = 0;
is_last_char = 0;
}
//--------------------------------
i++;
if (input[i]=='\0')
{
if (is_last_char==1)
{
if (i-beg>max)
{
max = len;
from = beg;
to = i-1;
}
}
//把最长字符串拷到output中,把对于input中的部分替换了
my_strcat(output,input,from,to);
break;
}
}
if (max==0)
{
return 0;
}
//return sort_string( input, output);
}
void main()
{
char input[]="djfkdjfkjg123dafddf123456";
char output[]="djfkdjfkjg123dafddf123456";
memset(output,0,sizeof(output));
cout<< input <<endl;
cout<< "------------------------------------------------------" <<endl;
sort_string( input, output);
cout<< output <<endl;
}
输出:
djfkdjfkjg123dafddf123456
------------------------------------------------
123456
Press any key to continue
#2
1 #include <stdio.h>
2
3 int main()
4 {
5 char a[100], *p;
6 int num, max;
7 while(p=a, *gets(p))
8 {
9 max = num = 0;
10 while(*p)
11 {
12 if(*p >= '0' && *p <= '9')
13 {
14 num = num*10 + *p - '0';
15 }
16 else
17 {
18 if(num > max) max = num;
19 num = 0;
20 }
21 p++;
22 }
23 if(num > max) max = num;
24 printf("%d\n", max);
25 }
26 return 0;
27 }
对于给定长度的字符串和小于int范围的数字,这程序应该不成问题吧。。。
2
3 int main()
4 {
5 char a[100], *p;
6 int num, max;
7 while(p=a, *gets(p))
8 {
9 max = num = 0;
10 while(*p)
11 {
12 if(*p >= '0' && *p <= '9')
13 {
14 num = num*10 + *p - '0';
15 }
16 else
17 {
18 if(num > max) max = num;
19 num = 0;
20 }
21 p++;
22 }
23 if(num > max) max = num;
24 printf("%d\n", max);
25 }
26 return 0;
27 }
对于给定长度的字符串和小于int范围的数字,这程序应该不成问题吧。。。
#3
谢谢您的指点 万分感谢 对您很简单的一个 对我这个菜鸟感觉有点难 我会努力的 谢谢
#4
谢谢您 但是好像您这个程序 找出来的字符串只能计算长度,没有输出呢?
#5
24 printf("%d\n", max);
有啊,你运行了???
asdfjie2354jie89
2354
dfjie2348afef3123iji
3123
1234jife898
1234
这就是我的结果,倒是没有计算长度
有啊,你运行了???
asdfjie2354jie89
2354
dfjie2348afef3123iji
3123
1234jife898
1234
这就是我的结果,倒是没有计算长度
#6
当字符串的长度超过十位的时候,你的就不行了吧?
这个是我写的,求批评!!!!!
这个是我写的,求批评!!!!!
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void the_longest_substring(char *s)
{
char *sub_string = (char*)malloc(strlen(s));
char *start = s;
char *end;
int len = 0;
while(*start!='\0')
{
while(*start!='\0' && (*start>'9' || *start<'0'))++start;
end = start;
while(*end!='\0' && (*end<='9' && *end>='0'))++end;
if(end-start>len)
{
int i;
for(i=0; i<end-start; ++i)
{
sub_string[i] = *(start+i);
}
len = end-start;
}
start = end;
}
int i;
for(i=0; i<len; ++i)
{
printf("%c", sub_string[i]);
}
free(sub_string);
}
void main()
{
char *s = "djfkdjfkjg123dafddf123456";
the_longest_substring(s);
printf("\n");
return ;
}
#7
你试试这个“12345678910”输入
#8
#include<stdio.h>
#include<string.h>
int continex(char* intputstr,char* outputstr){
int i=0;
int max=0;
char str[100];
int num=0;
for(i=0;intputstr[i]!='\0';i++){
if((intputstr[i]>='0')&& (intputstr[i]<='9')){
num++;
// printf("%c",intputstr[i]);
}
else
{
if(num>max){
max=num;
}
num=0;
}
}
if(num>max){
max=num;
}
return max;
}
int main(){
char intputstr[100];
char outputstr[100];
memset(outputstr,0,sizeof(outputstr));
printf("请输入字符串\n");
scanf("%s",intputstr);
int c=continex(intputstr,outputstr);
printf("最长的个数为d\n",c);
// printf("该字符串为s\n",outputstr);
return 0;
}
这是我写的一个 但是 只能算出最长的整数个数是多少 但是不能输出 您能在我写的基础上 把这个字符串 输出吗 我写了一个 总是告诉我 段错误 求改正
#include<string.h>
int continex(char* intputstr,char* outputstr){
int i=0;
int max=0;
char str[100];
int num=0;
for(i=0;intputstr[i]!='\0';i++){
if((intputstr[i]>='0')&& (intputstr[i]<='9')){
num++;
// printf("%c",intputstr[i]);
}
else
{
if(num>max){
max=num;
}
num=0;
}
}
if(num>max){
max=num;
}
return max;
}
int main(){
char intputstr[100];
char outputstr[100];
memset(outputstr,0,sizeof(outputstr));
printf("请输入字符串\n");
scanf("%s",intputstr);
int c=continex(intputstr,outputstr);
printf("最长的个数为d\n",c);
// printf("该字符串为s\n",outputstr);
return 0;
}
这是我写的一个 但是 只能算出最长的整数个数是多少 但是不能输出 您能在我写的基础上 把这个字符串 输出吗 我写了一个 总是告诉我 段错误 求改正
#9
大神,你牛,我看错题目了,我做的是找出字符串中最大的数字而且也说了是小范围的,但你的代码复杂度也大了点,勉强能接受一下
#10
你的代码中有两处出现“max=num;”在“max=num;”后面加上
int j=0;
for(j=0; j<num; ++j)
{
outputstr[j] = intputstr[i-num+j];
}
还有就是最后的两行输出语句你都没加%,我给你改了如下,替换一下就可以了。
printf("最长的个数为%d\n",c);
printf("该字符串为%s\n",outputstr);
int j=0;
for(j=0; j<num; ++j)
{
outputstr[j] = intputstr[i-num+j];
}
还有就是最后的两行输出语句你都没加%,我给你改了如下,替换一下就可以了。
printf("最长的个数为%d\n",c);
printf("该字符串为%s\n",outputstr);
#11
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%s, %d\n", max_pos, max_len);
}
#12
稍微修改一下
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%d\n", max_len);
while(*max_pos!='\0')
{
printf("%c", *max_pos);
++max_pos;
}
}
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%d\n", max_len);
while(*max_pos!='\0')
{
printf("%c", *max_pos);
++max_pos;
}
}
#13
刚才的那个有点问题,又改了一下,这下没问题了
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%d\n", max_len);
while('0' <= *max_pos && *max_pos <= '9')
{
printf("%c", *max_pos);
++max_pos;
}
}
#14
看到您给我纠正的 有点不好意思啦 其实昨天晚上我在写的时候 我也写了您给我指点的这段代码 运行结果也能输出来,但是后面总有一些无效字符(1234...无效字符),我就加了memset 但是把这段代码删除了 没有加上 唉
还有一点就是关于memset把outputstr数组都给赋值0 了 为什么最后 后面的0 都没有显示出来啊 还是memset函数 赋值0的话就是清空这个数组的作用啊
还有一点就是关于memset把outputstr数组都给赋值0 了 为什么最后 后面的0 都没有显示出来啊 还是memset函数 赋值0的话就是清空这个数组的作用啊
#15
#include<iostream>
#include<string>
using namespace std;
int main(){
char str[100];
while(scanf("%s",str)==1){
int b=0,e=0,s=0;
int begin=0,end=-1,len=0;
for(int i=0;str[i];++i){
if(str[i]<='9' && str[i]>='0'){
s++;
e=i;
}
else{
b=i+1;
s=0;
}
if(s>len){
begin=b;
end=e;
len=s;
}
}
printf("len== %d \n",len);
for(int i=begin;i<=end;++i)
printf("%c",str[i]);
puts("");
}
return 0;
}
#1
很早以前写过的一个小程序,随便简单改了一下来解决你的问题:
输出:
//=================================================================
#include <string.h>
#include <iostream.h>
void my_strcat(char output[],char input[],int from,int to)
{
int i=from;
static count = 0;
while (i<=to)
{
output[count] = input[i];
input[i] = ' ';
i++;
count++;
}
output[count] = ' ';
count++;
}
int sort_string(char input[],char output[])
{
int beg,end,len,is_last_char,i,max,from,to;
beg=end=len=is_last_char=i=max=from=to = 0;
max = 0;
while (1)
{
if( input[i]>='1' && input[i]<='9')
{
if (is_last_char==1)
{
len++;
}
else
{
beg = i;
}
is_last_char = 1;
}
else
{
if (is_last_char==1)
{
end = i-1;
if (len>max)
{
max = len;
from = beg;
to = end;
}
}
len = 0;
is_last_char = 0;
}
//--------------------------------
i++;
if (input[i]=='\0')
{
if (is_last_char==1)
{
if (i-beg>max)
{
max = len;
from = beg;
to = i-1;
}
}
//把最长字符串拷到output中,把对于input中的部分替换了
my_strcat(output,input,from,to);
break;
}
}
if (max==0)
{
return 0;
}
//return sort_string( input, output);
}
void main()
{
char input[]="djfkdjfkjg123dafddf123456";
char output[]="djfkdjfkjg123dafddf123456";
memset(output,0,sizeof(output));
cout<< input <<endl;
cout<< "------------------------------------------------------" <<endl;
sort_string( input, output);
cout<< output <<endl;
}
输出:
djfkdjfkjg123dafddf123456
------------------------------------------------
123456
Press any key to continue
#2
1 #include <stdio.h>
2
3 int main()
4 {
5 char a[100], *p;
6 int num, max;
7 while(p=a, *gets(p))
8 {
9 max = num = 0;
10 while(*p)
11 {
12 if(*p >= '0' && *p <= '9')
13 {
14 num = num*10 + *p - '0';
15 }
16 else
17 {
18 if(num > max) max = num;
19 num = 0;
20 }
21 p++;
22 }
23 if(num > max) max = num;
24 printf("%d\n", max);
25 }
26 return 0;
27 }
对于给定长度的字符串和小于int范围的数字,这程序应该不成问题吧。。。
2
3 int main()
4 {
5 char a[100], *p;
6 int num, max;
7 while(p=a, *gets(p))
8 {
9 max = num = 0;
10 while(*p)
11 {
12 if(*p >= '0' && *p <= '9')
13 {
14 num = num*10 + *p - '0';
15 }
16 else
17 {
18 if(num > max) max = num;
19 num = 0;
20 }
21 p++;
22 }
23 if(num > max) max = num;
24 printf("%d\n", max);
25 }
26 return 0;
27 }
对于给定长度的字符串和小于int范围的数字,这程序应该不成问题吧。。。
#3
谢谢您的指点 万分感谢 对您很简单的一个 对我这个菜鸟感觉有点难 我会努力的 谢谢
#4
谢谢您 但是好像您这个程序 找出来的字符串只能计算长度,没有输出呢?
#5
24 printf("%d\n", max);
有啊,你运行了???
asdfjie2354jie89
2354
dfjie2348afef3123iji
3123
1234jife898
1234
这就是我的结果,倒是没有计算长度
有啊,你运行了???
asdfjie2354jie89
2354
dfjie2348afef3123iji
3123
1234jife898
1234
这就是我的结果,倒是没有计算长度
#6
当字符串的长度超过十位的时候,你的就不行了吧?
这个是我写的,求批评!!!!!
这个是我写的,求批评!!!!!
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void the_longest_substring(char *s)
{
char *sub_string = (char*)malloc(strlen(s));
char *start = s;
char *end;
int len = 0;
while(*start!='\0')
{
while(*start!='\0' && (*start>'9' || *start<'0'))++start;
end = start;
while(*end!='\0' && (*end<='9' && *end>='0'))++end;
if(end-start>len)
{
int i;
for(i=0; i<end-start; ++i)
{
sub_string[i] = *(start+i);
}
len = end-start;
}
start = end;
}
int i;
for(i=0; i<len; ++i)
{
printf("%c", sub_string[i]);
}
free(sub_string);
}
void main()
{
char *s = "djfkdjfkjg123dafddf123456";
the_longest_substring(s);
printf("\n");
return ;
}
#7
你试试这个“12345678910”输入
#8
#include<stdio.h>
#include<string.h>
int continex(char* intputstr,char* outputstr){
int i=0;
int max=0;
char str[100];
int num=0;
for(i=0;intputstr[i]!='\0';i++){
if((intputstr[i]>='0')&& (intputstr[i]<='9')){
num++;
// printf("%c",intputstr[i]);
}
else
{
if(num>max){
max=num;
}
num=0;
}
}
if(num>max){
max=num;
}
return max;
}
int main(){
char intputstr[100];
char outputstr[100];
memset(outputstr,0,sizeof(outputstr));
printf("请输入字符串\n");
scanf("%s",intputstr);
int c=continex(intputstr,outputstr);
printf("最长的个数为d\n",c);
// printf("该字符串为s\n",outputstr);
return 0;
}
这是我写的一个 但是 只能算出最长的整数个数是多少 但是不能输出 您能在我写的基础上 把这个字符串 输出吗 我写了一个 总是告诉我 段错误 求改正
#include<string.h>
int continex(char* intputstr,char* outputstr){
int i=0;
int max=0;
char str[100];
int num=0;
for(i=0;intputstr[i]!='\0';i++){
if((intputstr[i]>='0')&& (intputstr[i]<='9')){
num++;
// printf("%c",intputstr[i]);
}
else
{
if(num>max){
max=num;
}
num=0;
}
}
if(num>max){
max=num;
}
return max;
}
int main(){
char intputstr[100];
char outputstr[100];
memset(outputstr,0,sizeof(outputstr));
printf("请输入字符串\n");
scanf("%s",intputstr);
int c=continex(intputstr,outputstr);
printf("最长的个数为d\n",c);
// printf("该字符串为s\n",outputstr);
return 0;
}
这是我写的一个 但是 只能算出最长的整数个数是多少 但是不能输出 您能在我写的基础上 把这个字符串 输出吗 我写了一个 总是告诉我 段错误 求改正
#9
大神,你牛,我看错题目了,我做的是找出字符串中最大的数字而且也说了是小范围的,但你的代码复杂度也大了点,勉强能接受一下
#10
你的代码中有两处出现“max=num;”在“max=num;”后面加上
int j=0;
for(j=0; j<num; ++j)
{
outputstr[j] = intputstr[i-num+j];
}
还有就是最后的两行输出语句你都没加%,我给你改了如下,替换一下就可以了。
printf("最长的个数为%d\n",c);
printf("该字符串为%s\n",outputstr);
int j=0;
for(j=0; j<num; ++j)
{
outputstr[j] = intputstr[i-num+j];
}
还有就是最后的两行输出语句你都没加%,我给你改了如下,替换一下就可以了。
printf("最长的个数为%d\n",c);
printf("该字符串为%s\n",outputstr);
#11
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%s, %d\n", max_pos, max_len);
}
#12
稍微修改一下
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%d\n", max_len);
while(*max_pos!='\0')
{
printf("%c", *max_pos);
++max_pos;
}
}
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%d\n", max_len);
while(*max_pos!='\0')
{
printf("%c", *max_pos);
++max_pos;
}
}
#13
刚才的那个有点问题,又改了一下,这下没问题了
void func(const char *str)
{
int len = 0;
int max_len = 0;
const char *max_pos = str;
for (;;)
{
if ('0' <= *str && *str <= '9')
{
++len;
}
else
{
if (len > max_len)
{
max_len = len;
max_pos = str - len;
}
len = 0;
if (0 == *str)
{
break;
}
}
++str;
}
printf("%d\n", max_len);
while('0' <= *max_pos && *max_pos <= '9')
{
printf("%c", *max_pos);
++max_pos;
}
}
#14
看到您给我纠正的 有点不好意思啦 其实昨天晚上我在写的时候 我也写了您给我指点的这段代码 运行结果也能输出来,但是后面总有一些无效字符(1234...无效字符),我就加了memset 但是把这段代码删除了 没有加上 唉
还有一点就是关于memset把outputstr数组都给赋值0 了 为什么最后 后面的0 都没有显示出来啊 还是memset函数 赋值0的话就是清空这个数组的作用啊
还有一点就是关于memset把outputstr数组都给赋值0 了 为什么最后 后面的0 都没有显示出来啊 还是memset函数 赋值0的话就是清空这个数组的作用啊
#15
#include<iostream>
#include<string>
using namespace std;
int main(){
char str[100];
while(scanf("%s",str)==1){
int b=0,e=0,s=0;
int begin=0,end=-1,len=0;
for(int i=0;str[i];++i){
if(str[i]<='9' && str[i]>='0'){
s++;
e=i;
}
else{
b=i+1;
s=0;
}
if(s>len){
begin=b;
end=e;
len=s;
}
}
printf("len== %d \n",len);
for(int i=begin;i<=end;++i)
printf("%c",str[i]);
puts("");
}
return 0;
}