鱼C论坛

 找回密码
 立即注册
查看: 2222|回复: 6

关于一个sting类的问题

[复制链接]
发表于 2018-7-24 17:33:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 御笔剑客 于 2018-7-24 17:53 编辑
#include <bits/stdc++.h>
using namespace std;
#define func(str) for(int i=0;i<str.size();++i)if(isupper(str[i]))str[i]=tolower(str[i])

int main()
{
    string s1,s2,temp;
    vector<string>v;
    cin>>s1;
    getline(cin,s2);
    func(s1);
    func(s2);
    stringstream ss;
    ss<<s2;
    while(ss>>temp){
        v.push_back(temp);
    }
    int cnt =0;
    int flag=1;
    int pos=-1;
    cout<<(s1==v[0])<<endl;
    for(int i=0;i<v.size();++i){
        if(v[i]==s1){
            cnt++;
        if(flag)pos=i,flag=0;
        }
    }
    if(cnt==0)cout<<-1<<endl;
    else cout<<cnt<<" "<<pos<<endl;
    return 0;
}

上面这段代码,输入:
To
to be or not to be is a question
应该输出2 0才对,
为什么  if(v[i]==s1)这个判断语句一直进不去?将s1和s2统一大小写后不是应该v[0]就等于s1吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-24 18:59:29 | 显示全部楼层
加个注释说不定会好看很多,这个define用的很灵性,能说说思路吗,这代码看的头大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 19:43:38 | 显示全部楼层
本帖最后由 无符号整形 于 2018-7-24 20:41 编辑
问题出在这里:[code]for(int i=0;i<v.size();++i)
应该改为i++

++i -> 语句开始就加
i++ -> 语句结束再加

所以就变成比较v[1]和s1了,自然就错误了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 20:09:56 | 显示全部楼层
GIF.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 20:29:53 | 显示全部楼层
#include <bits/stdc++.h>

using namespace std;

#define func(str)\
for(int i = 0;i < str.size(); ++i)\
        if(isupper(str[i]))\
                str[i] = tolower(str[i])

int main(void)
{
        string s1, s2, temp;
        vector<string>v;
        cin >> s1;
        std::cin.get();                // '\n'
        getline(cin, s2);
        func(s1);
        func(s2);
        
        stringstream ss;
        ss << s2;
        while(ss >> temp)
        {
                v.push_back(temp);
        }
        
        int cnt = 0;
        int flag = 1;
        int pos = -1;
        cout << (s1 == v[0]) << endl;
        for(int i = 0; i < v.size(); ++i)
        {
                if(v[i] == s1)
                {
                        cnt++;
                        if(flag)
                                pos = i, flag = 0;
                }
        }
        if(cnt == 0)
                cout << -1 << endl;
        else
                cout << cnt << " " << pos << endl;

        return 0;
}

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-25 12:30:35 | 显示全部楼层
宏的替换错误。可以考虑用内联函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-27 14:28:14 | 显示全部楼层
楼主可能题目写错了,是String不是Sting
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 06:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表