御笔剑客 发表于 2018-7-24 17:33:11

关于一个sting类的问题

本帖最后由 御笔剑客 于 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))str=tolower(str)

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)<<endl;
    for(int i=0;i<v.size();++i){
      if(v==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==s1)这个判断语句一直进不去?将s1和s2统一大小写后不是应该v就等于s1吗?

新元人 发表于 2018-7-24 18:59:29

加个注释说不定会好看很多,这个define用的很灵性,能说说思路吗,这代码看的头大

无符号整形 发表于 2018-7-24 19:43:38

本帖最后由 无符号整形 于 2018-7-24 20:41 编辑

问题出在这里:for(int i=0;i<v.size();++i)应该改为i++

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

所以就变成比较v和s1了,自然就错误了。

人造人 发表于 2018-7-24 20:09:56

人造人 发表于 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))\
                str = tolower(str)

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) << endl;
        for(int i = 0; i < v.size(); ++i)
        {
                if(v == s1)
                {
                        cnt++;
                        if(flag)
                                pos = i, flag = 0;
                }
        }
        if(cnt == 0)
                cout << -1 << endl;
        else
                cout << cnt << " " << pos << endl;

        return 0;
}


qq1242009750 发表于 2018-7-25 12:30:35

宏的替换错误。可以考虑用内联函数。

郑载序 发表于 2018-7-27 14:28:14

楼主可能题目写错了,是String不是Sting
页: [1]
查看完整版本: 关于一个sting类的问题