如何用c/c++实现? --查找由数字和字母组成的字符串中的最长字母串和最大整数

chunqingzhu 2008-12-03 01:59:36
如何用c/c++实现? --查找由数字和字母组成的字符串中的最长字母串和最大整数

要求:(1) 尽量不用库函数;
(2) 显示最长字母串及其长度;
(3) 最大整数要作为函数的返回值返回

例如:"123ABC789D4"
最长字母串是ABC;返回的最大整数是789(注意不是数字串789).
...全文
484 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaohongbo83 2008-12-04
  • 打赏
  • 举报
回复
up
chen_de_sheng 2008-12-04
  • 打赏
  • 举报
回复

#include<stdio.h>
int check(int c)
{
if (c >= '0' && c <= '9')
return 0;
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
return 1;
return 2;
}
void print(char str[], int len)
{
for (int i = 0; i < len; i++)
printf("%c", str[i]);
}
void main()
{
char str[] = "123ABC789D4";
int maxNum = 0, num = 0, len = 0, maxLen = 0;
int strI = 0, maxStrI = 0;
for (int i = 0; str[i]; i++)
{
int type = check(str[i]);
if (type == 0)
{
if (maxLen < len)
{
maxLen = len;
maxStrI = strI;
}
len = 0;
num = num * 10 + str[i] - '0';
}
else if (type == 1)
{
maxNum = maxNum < num ? num : maxNum;
num = 0;
if (len == 0)
strI = i;
len++;
}
}
printf("最长字母串是");
print(&str[maxStrI], maxLen);
printf("\n最大整数是%d\n", maxNum);
}
chunqingzhu 2008-12-04
  • 打赏
  • 举报
回复
我准备还留两天,如果这两天没见更好的解决方案,就结贴把分给fhtingtian和Chiyer两位朋友哈。
toadzw 2008-12-04
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
char str[]="123ABC789D4";
int strlen=0;
int maxnum=0;
int num;
int j=0,pos;
for (size_t i=0;i<sizeof(str)-1;)
{
num=0;
while (str[i]>='0'&&str[i]<='9')
{
num=num*10+str[i]-0x30;
i++;
}
if(i>=sizeof(str)) break;
if(maxnum<num) maxnum=num;
j=i;
while (str[i]<='Z'&&str[i]>='A')
i++;
if(i-j>strlen){
strlen=i-j;
pos=j;
}
}
cout<<"最大的数是"<<maxnum<<endl;
cout<<"最长的字符串是";
for(j=pos;j<pos+strlen;j++)
cout<<str[j];
cout<<endl;
system("pause");
return 0;
}


chunqingzhu 2008-12-04
  • 打赏
  • 举报
回复
感谢大家的积极参与!

题目是有些不严谨 :)
比如:(1)相同长度的最长串是不是应该继续比较?
(2)遇到超大整数应该如何处理?(超大整数如何比较?)
这样我觉得很难了!所以没写上,怕影响大家的积极性。

期待高手实现这些功能噢!!!!

不过这是面试题来的,我觉得时间上太紧了,能按要求初步实现就不错了,呵呵!!!
主要是考察c语言的功底,故面试官不让用库函数。
要用的话也可以,实现它
例如:strlen,strcpy等等
size_t strlen(const char *s)
{
const char *sc;
for (sc = s; *sc != '\0'; )
++sc;
return sc - s;
}

char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char *address = strDest;
while((*strDest++ = *strSrc++)!='\0')
NULL;
return address;
}


//String类的一种实现
class String
{
public:
String(const char *str = NULL);
String(const String &other);
~String(void);
String & operate =(const String &other);
private:
char *m_data;
};

String::~String(void)
{
delete [] m_data;
}

String::String(const char *str)
{
if(str == NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data,str);
}
}

String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data,other.m_data);
}

String &String::operator=(const String &other)
{
if(this == &other)
return *this;
delete [] m_data;

int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data,other.m_data);

return *this;
}
MAlice 2008-12-04
  • 打赏
  • 举报
回复
学习,关注!
SearchLife 2008-12-04
  • 打赏
  • 举报
回复
#include <iostream>

const int Size =12;
int FindABC(const char* a,int* i);

int main()
{
using namespace std;

char Arr[Size] = "123ABC789D4";

int index =0;
int* p = &index;

int len = FindABC(Arr,p);

for (int i = index;i<=index + len -1;i++)
{
cout << Arr[i];
}

}

int FindABC(const char* a,int* i)
{
int length =0;
int temp=0;
const char *b,*c;

b=a;

while (*b != '\0')
{
if ((*b >='a' && *b <='z') || (*b >='A' && *b <='Z'))
{
c = b+1;
while ((*c >='a' && *c <='z') || (*c >='A' && *c <='Z'))
{
c++;
}
temp = c-b;
if (temp > length)
{
*i = b-a;
length = temp;
}
b = c;
}
else
{
b++;
}
}

return length;
}

上面只实现了找最长字母串
cyj626 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 smdszgzh 的回复:]
num=num*10+str[i]-0x30;
这句话什么意思啊?特别是-0x30
新手啊,baidu找不到,所以问问!
[/Quote]
字符转换成为整数
smdszgzh 2008-12-04
  • 打赏
  • 举报
回复
num=num*10+str[i]-0x30;
这句话什么意思啊?特别是-0x30
新手啊,baidu找不到,所以问问!
ChamPagneZ 2008-12-04
  • 打赏
  • 举报
回复

(1) 尽量不用库函数; //昨天怎么没看到,看到了我就不会做了,电脑也不会中毒,晕
ChamPagneZ 2008-12-04
  • 打赏
  • 举报
回复
s = "shog12334455555djgosjgskdjgsjdgosa43487395753553539859385"

1.题设不严密,求最大整数么?楼上的那些代码储存都会有溢出!
2.最大字符可以有很多个。
3.昨天看这道题的时候,电脑奇迹般中毒,搞的整个公司的网络出了问题,汗。

//最大字符串,最大数替换一个谓词就可以。
#pragma warning(disable:4996)
#include <iostream>
#include <set>
#include <string>
#include <algorithm>
#include <sstream>
using namespace std;
int main(){
string s ="what43759djg1gjposs300";
string str_cpy;
replace_copy_if(s.begin(),s.end(),back_inserter(str_cpy),isdigit,' ');
set<string> sset;
string::size_type t = 0;
string temp;
istringstream output(str_cpy);
//最大字符串可以有很多,也可能两个完全相同最大字符串出现多次,所以用了set
while ( output >> temp )
{
if (temp.size() >= t )
{
if (temp.size() > t)
{
t = temp.size();
sset.clear();
}
sset.insert(temp);
}
}

for (set<string>::iterator i = sset.begin(); i != sset.end(); ++i)
{
cout << *i << " : " << (*i).size() << endl;
}
return 0;

}
toadzw 2008-12-03
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
char str[]="123ABC789D4";
int strlen=0;
int maxnum=0;
int num;
int j=0,pos;
for (size_t i=0;i<sizeof(str)-1;)
{
num=0;
while (str[i]>='0'&&str[i]<='9')
{
num=num*10+str[i]-0x30;
i++;
}
if(i>=sizeof(str)) break;
if(maxnum<num) maxnum=num;
j=i;
while (str[i]<='Z'&&str[i]>='A')
i++;
if(i-j>strlen){
strlen=i-j;
pos=j;
}
}
cout<<"最大的数是"<<maxnum<<endl;
cout<<"最长的字符串是";
for(j=pos;j<pos+strlen;j++)
cout<<str[j];
cout<<endl;
system("pause");
return 0;
}

星羽 2008-12-03
  • 打赏
  • 举报
回复

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

int GetMaxIntAndStr(const string& str, string* pMaxStr)
{
string maxStr;
int maxInt = 0;
string temStr;
string temInt;

for (size_t i = 0; i < str.length(); ++i)
{
if (str[i] >= '0' && str[i] <= '9')
{
if (temStr.length() > maxStr.length())
maxStr = temStr;
temStr = "";
temInt += str[i];
}
else
{
int n = atoi(temInt.c_str());
if (n > maxInt)
maxInt = n;
temInt = "";
temStr += str[i];
}
}

if (temStr.length() > maxStr.length())
maxStr = temStr;
int n = atoi(temInt.c_str());
if (n > maxInt)
maxInt = n;

(*pMaxStr) = maxStr;

return maxInt;
}

int main()
{
string str = "1231ABC789D4DDDDDDDDD";
string maxStr;
int maxInt = GetMaxIntAndStr(str, &maxStr);

cout<<maxStr<<endl;
cout<<maxInt<<endl;


return 0;
}
--------------------

DDDDDDDDD
1231














zxianrong 2008-12-03
  • 打赏
  • 举报
回复
顶死LS的
bfhtian 2008-12-03
  • 打赏
  • 举报
回复
写了一个简单的,lz可以改下

#include <iostream>
using namespace std;

int main()
{
char str[]="123ABC789D4";
int strlen=0;
int maxnum=0;
int num;
int j=0,pos;
for (size_t i=0;i<sizeof(str)-1;)
{
num=0;
while (str[i]>='0'&&str[i]<='9')
{
num=num*10+str[i]-0x30;
i++;
}
if(i>=sizeof(str)) break;
if(maxnum<num) maxnum=num;
j=i;
while (str[i]<='Z'&&str[i]>='A')
i++;
if(i-j>strlen){
strlen=i-j;
pos=j;
}
}
cout<<"最大的数是"<<maxnum<<endl;
cout<<"最长的字符串是";
for(j=pos;j<pos+strlen;j++)
cout<<str[j];
cout<<endl;
system("pause");
return 0;
}

lq651659889 2008-12-03
  • 打赏
  • 举报
回复
关注

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧