注册 登录
编程论坛 C++教室

菜鸟问题,不要见笑

yjg19841211 发布于 2010-08-27 23:54, 959 次点击
#include<iostream>
#include<string>
#include<cstring>
void strcount(char  *);
int main()
{
    using namespace std;
    string str;
    cout<<"enter...........\n";
    getline(cin,str);
    while(str!="")
    {
        strcount(&str);
        cout<<"enter!\n";
        getline(cin,str);
    }
    cout<<"*********\n";
    return 0;
}
void strcount(char *str)
{
    using namespace std;
    static int total=0;
    int count=0;
    while(*str++)
        count++;
    total+=count;
    cout<<count<<endl;
    cout<<total<<endl;
}
编译失败,错误为
 error C2664: 'strcount' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

xiti92.exe - 1 error(s), 0 warning(s)
12 回复
#2
毕业旅行2010-08-28 00:25
错了,好像不行那样。

[ 本帖最后由 毕业旅行 于 2010-8-28 00:47 编辑 ]
#3
weble2010-08-28 01:16
直接写str.size()就可以得到字符串长度了
另外string是C++类型,不提供到char*类型的转换运算符
#4
yjg198412112010-08-28 12:02
高手指点下,谢谢
#5
ToBeOOP2010-08-28 12:04
程序代码:
#include<iostream>
#include<string>
#include<cstring>
using std::cout;
using std::string;
using std::cin;
using std::endl;

void strcount(string str);
int main()
{
    string str;
    cout<<"enter...........\n";
    getline(cin,str);
    while(str!="")
    {
        strcount(str);
        cout<<"enter!\n";
        getline(cin,str);
    }
    cout<<"*********\n";
    return 0;
}
void strcount(string str)
{
    static int total=0;
    int count=0;
    string::size_type size_str = str.size ( );

 for(string::size_type index = 0 ; index != size_str && str[index++] ;)  {
     ++count;

 }
    total+=count;
    cout<<count<<endl;
    cout<<total<<endl;
}
改了下不清楚对不对,O(∩_∩)O~
#6
ToBeOOP2010-08-28 12:14
程序代码:
#include<iostream>
#include<string>
#include<cstring>
using std::cout;
using std::string;
using std::cin;
using std::endl;

void strcount(string str);
int main()
{
    string str;
    cout<<"enter...........\n";
    getline(cin,str);
    while(str!="")
    {
        strcount(str);
        cout<<"enter!\n";
        getline(cin,str);
    }
    cout<<"*********\n";
    return 0;
}
void strcount(string str)
{
    static int total=0;
    int count=0;
    string::size_type size_str = str.size ( );

 for(string::size_type index = 0 ; index != size_str ; ++index)  {
     if (str[index] != ' ')
     ++count;

 }
    total+=count;
    cout<<count<<endl;
    cout<<total<<endl;
}
不好意思,上面那个会把空格算在内的...再改了下,这个可以过滤空格
#7
yjg198412112010-08-28 17:02
先谢谢高手指点,下班在给分哈
#8
南国利剑2010-08-28 23:23
程序代码:
#include<iostream>
#include<string>
#include<cstring>
using std::cout;
using std::string;
using std::cin;
using std::endl;

void strcount(string str);
int main()
{
    string str;
    cout<<"enter...........\n";
    getline(cin,str);
    while(str!="")
    {
        strcount(str);
        cout<<"enter!\n";
        getline(cin,str);
    }
    cout<<"*********\n";
    return 0;
}
void strcount(string str)
{
    static int total=0;
    int count=0;
    string::size_type size_str = str.size ( );
for(string::size_type index = 0 ; index != size_str ; ++index)  {
     if (str[index] != ' ')
     ++count;
}
    total+=count;
    cout<<count<<endl;
    cout<<total<<endl;
}
#9
南国利剑2010-08-28 23:24
头文件还是写成上面的样子比较不会出错
#10
yjg198412112010-08-28 23:28
...........在帮帮忙,好象不能循环输入,大家看看循环有问题没,用cin的话可以循环,但无法退出
#11
ToBeOOP2010-08-29 08:47
你输入Ctrl+Z然后回车就可以退出了...
#12
zxh_852010-08-29 10:54
string是类,你的str是对象,默认是没法讲对象转换成char*类型的,需要重载转换运算符
1