关于一个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吗?
加个注释说不定会好看很多,这个define用的很灵性,能说说思路吗,这代码看的头大 本帖最后由 无符号整形 于 2018-7-24 20:41 编辑
问题出在这里:for(int i=0;i<v.size();++i)应该改为i++
++i -> 语句开始就加
i++ -> 语句结束再加
所以就变成比较v和s1了,自然就错误了。 #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;
}
宏的替换错误。可以考虑用内联函数。 楼主可能题目写错了,是String不是Sting
页:
[1]