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

string和C风格字符串可以直接进行逻辑运算吗?

蚕头燕尾 发布于 2013-08-08 21:38, 2731 次点击
#include<iostream>

int main()
{
    std::string s="sdofie";
    char ss[20]="sdofie";
    if(ss==s)
    {
        std::cout<<"yes.";
    }

}

实测不行,但是我在书上看的是这样说的:

string类重载运算符!=的方式让您能够在下述条件下使用它:至少有一个操作数为string对象,另一个操作数可以是string对象,也可以是C-风格字符串。

有经验的朋友请给个解释呗~

11 回复
#2
wp2319572013-08-08 22:44
说不太明白  不过可以修改成可以运行的代码
程序代码:
#include<iostream>
#include<string>

using namespace std;

int main()
{
    string s="sdofie";
    char ss[20]="sdofie";
    string s2(ss);
    if(strcmp(ss,s.c_str())==0)
    {
        std::cout<<"1.yes."<<endl;
    }
    if(s==s2)
    {
         std::cout<<"2.yes.";
    }
    return 0;
}


#3
蚕头燕尾2013-08-08 22:51
哦,你是用数组给string变量重新进行赋值了。

嗯,这样确实是对的。

反正我是没理解书上的那段话,我自我感觉没理解错他的意思吧。。

#4
wp2319572013-08-08 22:53
按照我在网上搜到的资料  重载运算符==  2侧应该都是string
#5
rjsp2013-08-09 08:36
可以,但楼主少了 #include <string> 吧
不要因为VC的<iostream>包含了<string>的部分信息就认为可以不需要#include <string>,不按C++标准行事能给你带来什么利益呢?如果你换个编译器你就要改代码,如果VC以后修正了这个问题你就要改代码,何不一开始就按标准规规矩矩行事?
#6
liufashuai2013-08-09 09:16
程序代码:
#include<iostream>
#include<string>

using namespace std;


int main()
{
    std::string s="sdofie";
    char ss[20]="sdofie";
    if(ss==s)
    {
        std::cout<<"yes.";
    }

    return 0;
}

#7
TonyDeng2013-08-09 10:29
默认的string类没有重载!=算符。你看清楚书上的叙述,那说的是在重载了算符的情况下可以做到这样,不是说已经可以这样了。

string类重载运算符!=的方式让您能够在下述条件下使用它:至少有一个操作数为string对象,另一个操作数可以是string对象,也可以是C-风格字符串。


[ 本帖最后由 TonyDeng 于 2013-8-9 10:31 编辑 ]
#8
peach54602013-08-09 11:19
以下是引用TonyDeng在2013-8-9 10:29:50的发言:

默认的string类没有重载!=算符。你看清楚书上的叙述,那说的是在重载了算符的情况下可以做到这样,不是说已经可以这样了。

string类重载运算符!=的方式让您能够在下述条件下使用它:至少有一个操作数为string对象,另一个操作数可以是string对象,也可以是C-风格字符串。

T版V5...
#9
lintaoyn2013-08-09 13:12
if(ss==s) 改成 if(s==ss)
#10
蚕头燕尾2013-08-10 14:14
回复 7楼 TonyDeng
我想你的意思是说:

必须自己去写那个重载函数吗?

我理解的书上的意思不是这样的,他的意思是编译器已经设定好了这个重载的。

因为我抄写的这段话之前他确实给出了一个例题,就是用一个string跟一个C风格字符串的比较。

我又试了一下,确实是缺少了头文件string的原因。

也不是我举得那个例子里的s和ss的书写顺序的问题。

看来该守规矩的时候还是得守规矩啊

#11
TonyDeng2013-08-10 20:51
那是个别编译器的“规矩”,你爱守就守呗,它能到处通行就守得过。编译通过了,你运行测试一下这样比较的结果是什么,有用吗?对两个指针用==或!=,比较的是地址还是地址所指向的内容?你需要哪个?什么规矩可以强制程序员使用哪个?

[ 本帖最后由 TonyDeng 于 2013-8-10 21:02 编辑 ]
#12
TonyDeng2013-08-11 14:21
1