| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1419 人关注过本帖
标题:请教:编译成功但运行结果不成功呢
只看楼主 加入收藏
dubaoshi
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2006-9-22
收藏
 问题点数:0 回复次数:11 
请教:编译成功但运行结果不成功呢
今天按书上的写了个程序,检测所输入的一段文字当中,字母出现的次数,编译成功了,但不能正常运行,表现在输入完一段文字以后,程序在屏幕上输出一次,然后还让继续输入文字~~~死循环了好象。
我检查了半天,也没弄明白怎么回事,请高手指点,谢谢!

程序如下:
#include<iostream.h>
#include<iomanip>
#include<cassert>


class String;//定义新类
istream& operator>>(istream&,String&);
ostream& operator<<(ostream&,const String&);
 //以下为具体定义
class String{
    public:
    String();
    String(const char*);
    String(const String&);
   
    ~String();
   
    String& operator=(const String&);
    String& operator=(const char*);
   
    bool operator==(const String&);
    bool operator==(const char*);
   
    char& operator[](int);
   
    int size(){return _size;}
    char* c_str(){return _string;}
   
    private:
    int _size;
    char* _string;
 };
 //以下为成员函数
 inline String::String()
 {
    _size=0;
    _string=0;
 }
 inline String::String(const char *str)
 {
    if(!str){
        _size=0;_string=0;
    }
    else{
        _size=strlen(str);
        _string=new char[_size+1];
        strcpy(_string,str);
    }
 }
 
 inline String::String(const String &rhs)
 {
    _size=rhs._size;
    if(!rhs._string)
    _string=0;
    else{
        _string=new char[_size+1];
        strcpy(_string,rhs._string);
    }
 }
 
 inline String::~String(){delete[] _string;}
 
 inline String& String::operator=(const char *s)
 {
    if(!s){
        _size=0;
        delete[] _string;
        _string=0;
    }
    else{
        _size=strlen(s);
        delete [] _string;
        _string=new char[_size+1];
        strcpy(_string,s);
    }
    return *this;
 }
 
 inline istream& operator>>(istream &io,String &s)
{
    const int limit_string_size=4096;
    char inBuf[limit_string_size];
   
    io>>setw(limit_string_size)>>inBuf;
    s=inBuf;
   
    return io;
}

inline ostream& operator<<(ostream &os,String &s)
{
    return os<<s.c_str();
}
 
 inline bool String::operator==(const char *s)
 {
    return strcmp(_string,s)?false:true;
 }
 
 inline bool String::operator==(const String &rhs)
 {
    return strcmp(_string,rhs._string)?false:true;
 }
 
 inline char& String::operator[](int elem)
 {
    assert(elem>=0&&elem<_size);
    return _string[elem];
 }
  //以下为主程序
 int main()
 {
    int aCnt=0,eCnt=0,iCnt=0,oCnt=0,uCnt=0,theCnt=0,itCnt=0,wdCnt=0,notVowel=0;
    String buf,the("the"),it("it");
   
    //cin>>buf;
    while(cin>>buf)
        {
        ++wdCnt;
        cout<<buf<<' ';
        if(wdCnt%12==0)
        cout<<endl;
        if(buf==the||buf=="The")
        ++theCnt;
        else
        if(buf==it||buf=="It")
        ++itCnt;
        
        for(int ix=0;ix<buf.size();++ix)
        {
            switch(buf[ix])
            {
                case'a':case'A':++aCnt;break;
                case'3':case'#':++eCnt;break;
                case'i':case'I':++iCnt;break;
                case'o':case'O':++oCnt;break;
                case'u':case'U':++uCnt;break;
                default: ++notVowel;break;
            }
        }
    }
    cout<<"\n\n"
    <<"words read:"<<wdCnt<<"\n=n"
    <<"the/The:"<<theCnt<<'\n'
    <<"it/It:"<<itCnt<<"\n\n"
    <<"non-vowels read:"<<notVowel<<"\n\n"
    <<"a:"<<aCnt<<'\n'
    <<"e:"<<eCnt<<'\n'
    <<"i:"<<iCnt<<'\n'
    <<"o:"<<oCnt<<'\n'
    <<"u:"<<uCnt<<endl;
 }

第一次弄这么长的程序,大家鼓励一下吧:)
搜索更多相关主题的帖子: 编译 结果 运行 
2008-05-05 11:18
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
int main()
{
    int aCnt=0,eCnt=0,iCnt=0,oCnt=0,uCnt=0,theCnt=0,itCnt=0,wdCnt=0,notVowel=0;
    String buf,the("the"),it("it");
   
    //cin>>buf;
    while(cin>>buf)
    {
        ++wdCnt;
        cout<<buf<<' ';
        if(wdCnt%12==0)
            cout<<endl;
        if(buf==the||buf=="The")
            ++theCnt;
        else
            if(buf==it||buf=="It")
                ++itCnt;
            
            for(int ix=0;ix<buf.size();++ix)
            {
                switch(buf[ix])
                {
                case'a':case'A':++aCnt;break;
                case'3':case'#':++eCnt;break;
                case'i':case'I':++iCnt;break;
                case'o':case'O':++oCnt;break;
                case'u':case'U':++uCnt;break;
                default: ++notVowel;break;
                }
            }
            
            cout<<"\n\n"
                <<"words read:"<<wdCnt<<"\n=n"
                <<"the/The:"<<theCnt<<'\n'
                <<"it/It:"<<itCnt<<"\n\n"
                <<"non-vowels read:"<<notVowel<<"\n\n"
                <<"a:"<<aCnt<<'\n'
                <<"e:"<<eCnt<<'\n'
                <<"i:"<<iCnt<<'\n'
                <<"o:"<<oCnt<<'\n'
                <<"u:"<<uCnt<<endl;
    }//while应该在这结束
    return 0;
}

雁无留踪之意,水无取影之心
2008-05-05 12:49
dubaoshi
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2006-9-22
收藏
得分:0 
哎,还是不行啊~~
谁帮忙调试一下吧。

人行善,福虽未至,祸已远离;人行恶,祸虽未至,福已远离.
2008-05-05 13:34
dubaoshi
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2006-9-22
收藏
得分:0 
我象如下这样用,也会出现死循环的了,如果解决了这个,也就解决了上面的问题。
本例如下:

#include<iostream.h>
#include<string>

void main()
{
    string str;
    while(cin>>str)
    {
         cout<<str<<endl;
    }
}

人行善,福虽未至,祸已远离;人行恶,祸虽未至,福已远离.
2008-05-05 16:26
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
没看清楚,在看看

[[it] 本帖最后由 中学者 于 2008-5-5 16:47 编辑 [/it]]

樱花大战,  有爱.
2008-05-05 16:44
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
你 自己写的多组测试,不是死循环嘛

樱花大战,  有爱.
2008-05-05 16:48
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
while(cin>>str)        //str为零的时候 可能就不循环了
2008-05-05 17:50
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
得分:0 
没写输入跳出语句  cin一直有效 你让它怎么停止?  要不你就以ctrl+z命令停止吧再按enter
2008-05-06 22:23
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
如果仅仅是测试字符个数不用这样做..有很简单的方法

学习需要安静。。海盗要重新来过。。
2008-05-06 22:26
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
这个不叫死循环.....

在WINDOWS下,输入CTRL+Z结束循环,在LINUX下输入CTRL+D

PS:
我在2楼给你改的是输入数据没有结果的问题

雁无留踪之意,水无取影之心
2008-05-06 22:33
快速回复:请教:编译成功但运行结果不成功呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016972 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved