| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2731 人关注过本帖
标题:string和C风格字符串可以直接进行逻辑运算吗?
只看楼主 加入收藏
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
结帖率:96.08%
收藏
已结贴  问题点数:20 回复次数:11 
string和C风格字符串可以直接进行逻辑运算吗?
#include<iostream>

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

}

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

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

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

搜索更多相关主题的帖子: 字符串 风格 
2013-08-08 21:38
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
说不太明白  不过可以修改成可以运行的代码
程序代码:
#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;
}



DO IT YOURSELF !
2013-08-08 22:44
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
哦,你是用数组给string变量重新进行赋值了。

嗯,这样确实是对的。

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


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-08 22:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
按照我在网上搜到的资料  重载运算符==  2侧应该都是string

DO IT YOURSELF !
2013-08-08 22:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
可以,但楼主少了 #include <string> 吧
不要因为VC的<iostream>包含了<string>的部分信息就认为可以不需要#include <string>,不按C++标准行事能给你带来什么利益呢?如果你换个编译器你就要改代码,如果VC以后修正了这个问题你就要改代码,何不一开始就按标准规规矩矩行事?
2013-08-09 08:36
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:2 
程序代码:
#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;
}


有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-09 09:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
默认的string类没有重载!=算符。你看清楚书上的叙述,那说的是在重载了算符的情况下可以做到这样,不是说已经可以这样了。

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


[ 本帖最后由 TonyDeng 于 2013-8-9 10:31 编辑 ]

授人以渔,不授人以鱼。
2013-08-09 10:29
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:2 
以下是引用TonyDeng在2013-8-9 10:29:50的发言:

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

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

T版V5...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-09 11:19
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:2 
if(ss==s) 改成 if(s==ss)

迭代的是人,递归的是神。
2013-08-09 13:12
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 7楼 TonyDeng
我想你的意思是说:

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

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

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

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

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

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


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-10 14:14
快速回复:string和C风格字符串可以直接进行逻辑运算吗?
数据加载中...
 
   



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

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