鱼C论坛

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

关于一个sting类的问题

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

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

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

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

  4. int main()
  5. {
  6.     string s1,s2,temp;
  7.     vector<string>v;
  8.     cin>>s1;
  9.     getline(cin,s2);
  10.     func(s1);
  11.     func(s2);
  12.     stringstream ss;
  13.     ss<<s2;
  14.     while(ss>>temp){
  15.         v.push_back(temp);
  16.     }
  17.     int cnt =0;
  18.     int flag=1;
  19.     int pos=-1;
  20.     cout<<(s1==v[0])<<endl;
  21.     for(int i=0;i<v.size();++i){
  22.         if(v[i]==s1){
  23.             cnt++;
  24.         if(flag)pos=i,flag=0;
  25.         }
  26.     }
  27.     if(cnt==0)cout<<-1<<endl;
  28.     else cout<<cnt<<" "<<pos<<endl;
  29.     return 0;
  30. }

复制代码


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

使用道具 举报

发表于 2018-7-24 18:59:29 | 显示全部楼层
加个注释说不定会好看很多,这个define用的很灵性,能说说思路吗,这代码看的头大
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

所以就变成比较v[1]和s1了,自然就错误了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 20:09:56 | 显示全部楼层
GIF.gif
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. using namespace std;

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

  7. int main(void)
  8. {
  9.         string s1, s2, temp;
  10.         vector<string>v;
  11.         cin >> s1;
  12.         std::cin.get();                // '\n'
  13.         getline(cin, s2);
  14.         func(s1);
  15.         func(s2);
  16.        
  17.         stringstream ss;
  18.         ss << s2;
  19.         while(ss >> temp)
  20.         {
  21.                 v.push_back(temp);
  22.         }
  23.        
  24.         int cnt = 0;
  25.         int flag = 1;
  26.         int pos = -1;
  27.         cout << (s1 == v[0]) << endl;
  28.         for(int i = 0; i < v.size(); ++i)
  29.         {
  30.                 if(v[i] == s1)
  31.                 {
  32.                         cnt++;
  33.                         if(flag)
  34.                                 pos = i, flag = 0;
  35.                 }
  36.         }
  37.         if(cnt == 0)
  38.                 cout << -1 << endl;
  39.         else
  40.                 cout << cnt << " " << pos << endl;

  41.         return 0;
  42. }
复制代码


1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-25 12:30:35 | 显示全部楼层
宏的替换错误。可以考虑用内联函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-27 14:28:14 | 显示全部楼层
楼主可能题目写错了,是String不是Sting
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 21:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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