求一个字符串中最长数字串及其长度 #华为2018年春招机试题#
2018-03-22 19:01
441 查看
给定一个字符串,输出字符串中最长的数字串,并把这个数字串的长度输出
例如输入:abcd12345ed125ef123058789
输出:123058789,9
分析:(1)怎么区分是不是数字 ==> s[i]>='0' && s[i]<='9'
(2)用一个变量记住最长数字串从第几个字符开始,用一个变量记住最长数字串的长度,遍历字符串的过程中还需要两个临时变量记录数字串开始位置和其长度。#include<iostream>
using namespace std;
void FindLongestNumStr(const char* pstr,size_t length);
int main()
{
char pstr[] = "abcd12345ed125ef123058789cdef1234567890ab";
size_t length = sizeof(pstr)/sizeof(char)-1;
cout<<length<<endl;
FindLongestNumStr(pstr,length);
return 0;
}
void FindLongestNumStr(const char* pstr,size_t length)
{
int i_max_start = 0;
int i_temp_start = 0;
int i_max_length = 0;
int i_temp_length = 0;
for(int i = 0;i < length;i++)
{
//如果是数字
if(pstr[i]>='0' && pstr[i]<='9')
{
//判断是不是新的数字串开始,如果是则记录新的数字串下标
if(0 == i_temp_start)
{
i_temp_start = i;
}
//数字串长度加1
i_temp_length++;
}
//如果不是数字
else
{
//是否遍历到了数字串?
if(0 != i_temp_length)//遍历到数字了
{
//如果i_temp_length大,那么将i_temp_length赋给i_max_length,将i_temp_start赋给i_max_start
if(i_max_length < i_temp_length)
{
i_max_length = i_temp_length;
i_max_start = i_temp_start;
}
//临时标记变量归零
i_temp_start = 0;
i_temp_length = 0;
}
}
//如果到达字符串结尾,那么
if(length-1 == i)
{
if(i_max_length < i_temp_length)
{
i_max_length = i_temp_length;
i_max_start = i_temp_start;
}
}
}
//输出最长数字串
for(int i=i_max_start;i<i_max_start+i_max_length;i++)
{
cout<<pstr[i];
}
cout<<","<<i_max_length<<endl;
}
例如输入:abcd12345ed125ef123058789
输出:123058789,9
分析:(1)怎么区分是不是数字 ==> s[i]>='0' && s[i]<='9'
(2)用一个变量记住最长数字串从第几个字符开始,用一个变量记住最长数字串的长度,遍历字符串的过程中还需要两个临时变量记录数字串开始位置和其长度。#include<iostream>
using namespace std;
void FindLongestNumStr(const char* pstr,size_t length);
int main()
{
char pstr[] = "abcd12345ed125ef123058789cdef1234567890ab";
size_t length = sizeof(pstr)/sizeof(char)-1;
cout<<length<<endl;
FindLongestNumStr(pstr,length);
return 0;
}
void FindLongestNumStr(const char* pstr,size_t length)
{
int i_max_start = 0;
int i_temp_start = 0;
int i_max_length = 0;
int i_temp_length = 0;
for(int i = 0;i < length;i++)
{
//如果是数字
if(pstr[i]>='0' && pstr[i]<='9')
{
//判断是不是新的数字串开始,如果是则记录新的数字串下标
if(0 == i_temp_start)
{
i_temp_start = i;
}
//数字串长度加1
i_temp_length++;
}
//如果不是数字
else
{
//是否遍历到了数字串?
if(0 != i_temp_length)//遍历到数字了
{
//如果i_temp_length大,那么将i_temp_length赋给i_max_length,将i_temp_start赋给i_max_start
if(i_max_length < i_temp_length)
{
i_max_length = i_temp_length;
i_max_start = i_temp_start;
}
//临时标记变量归零
i_temp_start = 0;
i_temp_length = 0;
}
}
//如果到达字符串结尾,那么
if(length-1 == i)
{
if(i_max_length < i_temp_length)
{
i_max_length = i_temp_length;
i_max_start = i_temp_start;
}
}
}
//输出最长数字串
for(int i=i_max_start;i<i_max_start+i_max_length;i++)
{
cout<<pstr[i];
}
cout<<","<<i_max_length<<endl;
}
相关文章推荐
- 005求一个字符串中出现相同且长度最长的字符串,输出它及其首字符位置
- 求一个字符串中最长连续字串及其长度
- 求一个字符串中出现的相同且长度最长的字符串,及其首字符的位置
- 华为机试题:输入两个超长整型构成的字符串,其间使用一个空格分隔,每个字符串最大长度为100个字符。求第一个整数除以第二个整数以后的余数。。
- 写一个函数,用来把一个字符串用指定的字符作为分隔符分割成若干个子串输出 | 写一个函数,用来返回一个字符串中重复出现的最长字串的长度及其开始地址
- 返回一个字符串中重复出现的最长字串的长度及其开始字符
- 输入一行字符串,找出其中出现的相同且长度最长的字符串,输出他及其首字符串位置
- (1452)找出字符串中出现的相同的且长度最长的字符串,输出它及其首字母的位置
- 输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
- 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 计算出一个字符串中最长的字符的长度
- 华为机试题---判断一个字符串中的"( )"是否配对
- 输入一行字符串,找出出现的相同且长度最长的字符串,输出它及其首字母的置比如:“yyabcdagaerabceg”答案应该是abc
- 华为2013校园招聘机试题目题4:删除一个字符串中出现次数最少的字符
- 华为上机(2)输出一个字符串中最长的一个单词
- 给定一个字符串。求最长的无重复子字符串长度。
- 华为机试题3——字符串最后一个单词的长度
- 华为练习题 在字符串中找出连续最长的数字串,并把这个串的长度返回
- 回文串是指这个字符串无论从左读还是从右读,所读的顺序是一样的;简而言之,回文串是左右对称的。现在,对于一个给定的母串 abcdedcb求最长回文子串的长度