科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件标准C程式库--问题例--类型 String

标准C程式库--问题例--类型 String

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

撰写下列函式,其引数为 string 类别 .

来源:中国软件网 2008年3月31日

关键字: string 类型 C++ C Linux

  • 评论
  • 分享微博
  • 分享邮件

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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章