标题:求大神说明该如何修改这个错误~~~~~
取消只看楼主
Hee麦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-3
结帖率:66.67%
已结贴  问题点数:10 回复次数:4 
求大神说明该如何修改这个错误~~~~~
我写的这个string Upper(string & s);函数是为了:将string对象的内容装换为大写,但是不知道该如何一个个地读取string字符串里的字符
这个函数要求接受一个指向string对象的应用做为参数;


#include <iostream>
#include <string>
#include <cctype>
using namespace std;

string Upper(string & s);

int main()
{
    cout<<"Enter a string (q to quit): ";
    string str;
    getline(cin,str);
    Upper(str);
    while(str!="q")
    {
        cout<<"Next string (q to quit): ";
        getline(cin,str);
        Upper(str);
    }
    cout<<"Bye.\n";
    return 0;
}

string Upper(string & s)
{
    while(*s)
    {
        toupper(*s);
        s++;
    }
    return s;
}
搜索更多相关主题的帖子: include 字符串 Enter 
2012-12-23 13:17
Hee麦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-3
得分:0 
谢谢!
2012-12-24 10:18
Hee麦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-3
得分:0 
回复 3楼 yuccn
你好,感谢你的解答,但是我还没解决这个问题,这个代码是我做C++ Primer Plus(第五版)第八章编程题第3题的答案,不过我按照你的修改后没能按题目要求正确运行。

原题目:编写一个函数,他接受一个指向string对象的引用作为参数,并将该string对象的内容转换为大写,为此可使用函数toupper()。然后编写一个程序,它通过使用一个循环让你能够用不同的输入来测试这个函数,改程序的运行情况如下:
Enter a string (q to quit): go away
GO AWAY
Next string (q to quit): good grief!
GOOD GRIEF!
Next string (q to quit):q
Bye.

而我现在写的代码是:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
string Upper(string & s);
int main()
{
    cout<<"Enter a string (q to quit): ";
    string str;
    getline(cin,str);
    Upper(str);
    while(str!="q")
    {
        cout<<"Next string (q to quit): ";
        getline(cin,str);
        Upper(str);
    }
    cout<<"Bye.\n";
    return 0;
}

string Upper(string &s)
{
    char *pStr = (char *)s.c_str();
    while(*pStr)
    {
       *pStr = toupper(*pStr);
        pStr++;
    }
    return s;
}

结果运行后,功能没实现,我不知道错在哪里了。如果你有空的话,请帮我看一下 指出错误的地方或该怎么修改,谢谢!
2012-12-24 10:48
Hee麦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-3
得分:0 
回复 7楼 mmmmmmmmmmmm
感谢,我把你给我的代码运行之后,出现了新问题是:输入字符串后要按两次才显示转换后的大写,我认为是getline()函数保留回车符,下一次读取会先读取回车符,我就在循环里加了一句cin.get();不过还是没能解决。

while (1)
    {
        getline(cin,str);
        cin.get();
        if (str == "q")
        {
            break;
        }
        cout<<Upper(str)<<endl;
        cout<<"Next string (q to quit): ";
    }
    cout<<"Bye.\n";
    return 0;
}

2012-12-24 18:42
Hee麦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-3
得分:0 
好的,谢谢
2012-12-26 14:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-393056-1-1.html




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

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