扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Q1:撰写下列函式,其引数为 string 类别
islower - 引数的内容为小写字母,删传回true
isdigit - 引数的内容为数字,则传回 true
isalphabetic - 引数的内容为大小写字母,则传回 true
isaplhanumeric - 引数的内容为大小写字母或数字时 ,则传回 true
A1:须引入
bool islower(string &text)
{
for (unsigned int i=0;i {
if((text[i] < ''a'') (text[i] >''z'')) return false;
}
return true;
}
bool isdigit(string &text)
{
for (unsigned int i=0;i {
if((text[i] < ''0'') (text[i] > ''9'')) return false;
}
return true;
}
bool isaplhabetic(string &text)
{
for (unsigned int i=0;i {
if(
((text[i] < ''A'') (text[i] >''Z'')) &&
((text[i] < ''a'') (text[i] >''z''))
) return false;
}
return true;
}
bool isalphanumeric(string &text)
{
for (unsigned int i=0;i {
if(
((text[i] < ''a'') (text[i] >''z'')) &&
((text[i] < ''A'') (text[i] >''Z'')) &&
((text[i] < ''0'') (text[i] >''9''))
) return false;
}
return true;
}
Q2:撰写一函式可以判断两字串是否为异位字 ( 长度和字母相同,但顺序不同 )。
A2:须引入 、
bool anagram(string s1,string s2)
{
sort(s1.begin(),s1.end()); file://将两字串排序,并比较是否相同
sort(s2.begin(),s2.end());
if (s1 == s2) return true;
return false;
}
Q3:从输入流读入一文字档案,并计算单字个数和平均每个字的长度。
A3:须引入 、、
void main()
{
string filename,buffer,word; file://宣告变数
fstream file; ile://buffer为资料缓区
int words=0,allchar=0; ile://word为允许的英文字母
int start,end;
file://以下为档案读取程序,此程式没有错误处理
cout << "请输入档案名称:";
cin >> filename;
file.open(filename.c_str());
while (!file.eof()) file://读取资料圈
{
char ch;
file.get(ch);
buffer += ch;
}
file.close();
file://合法字母填入
for (int i=0;i<26;i++)
{
word += (''a''+i);
word += (''A''+i);
}
file://以下为字母分析
int len = buffer.length();
start = buffer.find_first_of(word,0); file://取得第一合法字母位置
while (start >=0 && start < len) file://检查取得值是否正确
{
end = buffer.find_first_not_of(word,start); file://取得第一不合法字母位置
if (end < 0 && end > len) end = len; file://检查取得值是否正确
allchar += (end-start); file://加总字数
words++; file://单字数加一
start = buffer.find_first_of(word,end++); file://在取得下一个合法字母位置
} file://从 end 後的位置开始
double average = double(allchar) / words; file://型别转换
cout << "words = " << words << endl ; file://印出
cout << "average = " << average << endl;
}
Q4:以继承的方法,重载 " * " 运算子,使它的功能为--将字串重 n 次。例如 " this" * 3 为 "thisthisthis" 。
A4:须引入
class NString : public string
{
public:
NString operator * (unsigned int);
};
NString NString::operator * (unsigned int n)
{
NString temp;
while (n!=0)
{
temp += c_str();
n--;
}
return temp;
}
Q5:以继承的方法,重载 "- " 运算子,使它的功能为--删除特定字串。如果有重的字串,请删除最前的字串。
A5:须引入
class NString : public string
{
public:
NString operator - (NString);
};
NString NString::operator - (NString str)
{
NString temp;
unsigned int pos1 = string::find(str);
unsigned int len1 = str.length();
temp.assign(c_str());
if (pos1 > 0 && pos1 <= length()) temp.erase(pos1,len1);
return temp;
}
Q6:以继承的方法,重载 " int " 型别转换运算拟,使它能转换字串中的第一个数字。
A6:须引入
class NString : public string
{
public:
operator int();
};
NString::operator int()
{
string num("0123456789"),temp; file://所有合法的数字
int val=0;
file://取得第一个数字的位置
unsigned int start = find_first_of(num,0);
unsigned int end = find_first_not_of(num,start);
temp = substr(start,(end-start));
file://转换字串成整数
for (unsigned int i=0;i {
val += (temp[i] - ''0''); file://利用圈来取得每一个字元的数字
val *= 10; file://取得後进位,但个位数会移到十位数
} file://除 10 把个位数拉回
if ( at(start-1) == ''-'' ) return -val/10; file://数字前一个位置是否为负号
return val/10;
}
已有 0 位对此文章感兴趣的网友发布了看法 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者