读书人

这个C++程序调试以后赋值不成功

发布时间: 2012-08-08 14:32:45 作者: rapoo

这个C++程序调试之后,赋值不成功
[code=C/C++][/code]

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
string curstr,//当前输入的单词
prestr,//先前输入的单词
maxstr;//出现次数最多的单词,需输出
int cnt=0,//当前单词的出现次数
maxcnt=1;//最多出现次数

cout<<"enter some strings"<<endl;
while(cin>>curstr)//逐个输入单词,直到ctrl+Z
{
if(curstr==prestr)//当前输入的单词=先前的
++cnt;//次数加1
else
{
if(cnt>maxcnt)//如果当前次数大于之前的最大次数
{
maxcnt=cnt;//将当前次数赋值给最大次数
maxstr=curstr;//将当前出现次数最多的单词赋值给maxstr
}
cnt=1;//将当前单词的次数重置为1
}
prestr=curstr;//修改对前一次单词的记录
}

if(maxcnt!=1)//当前单词有重复
cout<<maxstr<<" repect for "<<maxcnt<<endl;
else
cout<<"there is no repect word"<<endl;
return 0;
}


[解决办法]
楼主的代码从根本上应该就是错误的。因为你最多只能保持3个单词,而且单词对应的次数也似乎是乱套的。

这个问题用map来解比较好map<string, int>,即用单词作为key,对应的值就是该单词出现的次数。

参考哥下面的代码吧:

C/C++ code
#include <map>#include <iostream>#include <string>using namespace std;int main(int argc, char** argv){    string input;    map<string, int> words;    while(cin >> input)    {        if(words.find(input) != words.end())        {            words.find(input)->second++;        }        else        {            words.insert(pair<string, int>(input, 1));        }    }    cout << "次数" << "\t" << "单词" << endl;    cout << "====================================" << endl;    for(map<string, int>::iterator iter = words.begin(); iter != words.end(); ++iter)    {        cout << iter->second << "\t" << iter->first << endl;    }    return 0;}
[解决办法]
“多一少一”问题占程序员常犯错误的10%以上!

读书人网 >C++

热点推荐