编程英语单词

可能字符串中没有加\0,数组b[80]没有显示0初始化,find函数中没有显式加\0。我不懂你的算法,只能这样猜测。写一个标准的库方法,可以参考下面的:

# include & ltiostream & gt

# include & ltsstream & gt

# include & lt地图& gt

使用命名空间std

int main()

{

typedef string::size _ type ST;

//存储所有单词的长度、单词本身以及单词出现的位置。

多地图& ltST,pair & ltstring,ST & gt& gtm;

弦线;

cout & lt& lt请输入一个英语句子:

getline(cin,line);

ST pos = 0;

while((pos=line.find(','))& ltline.size())

第[pos]行=“”;//替换所有逗号。

istringstream ins(行);

字符串令牌;

pos = 0;

while(ins & gt;& gt令牌)

m . insert(pair & lt;ST,pair & ltstring,ST & gt& gt(token.size(),

pair & ltstring,ST & gt(token,pos=line.find(token,pos)+1));

ST t = m . r begin()-& gt;第一;

//地图容器默认按键排序,最后一个长度最长。去吧。

for(multimap & lt;ST,pair & ltstring,ST & gt& gt::reverse _ iterator it = m . Rb egin();

它!= m . rend();++it)

如果(它-& gt;first==t)

cout & lt& lt“最长的单词是”

& lt& lt"起始位置是:"

else break

}

如果有长度相同的单词,则以逆序显示,这样更简单。起始位置从1开始计算。