柿子饼同学 发表于 2022-4-28 23:07:38

匹配字符串(这次是不同方法)

#include <bits/stdc++.h>
using namespace std;

void low(string &s){
      for(char i : s){
                i = tolower(i);
      }
}

string tar, temp = "***"; //tar是目标, temp临时变量
int tarsize, c = 0, l = 0; //第一个是目标的长度, c代表找到几次, l是实时更新的位置
vector<int> locate; //记录位置
bool isfind = false;
int main(){
      ios::sync_with_stdio(false);
      cin >> tar;
      low(tar);
      tarsize = tar.size();
      while(temp != "\0"){
                cin >> temp;
                low(temp);
                if(tar == temp){
                        isfind = true;
                        c++;
                        locate.push_back(l);
                }
                l += temp.size() + 1; //加一有空格
      }
      if(isfind){
                cout << locate << ' ' << c;
      }
      else{
                cout << "-1";
      }
      return 0;
}
代码如上
题目:https://www.luogu.com.cn/problem/P1308
这次我的想法是反正每个单词之间都有空格, 可以用cin一个一个读, 然后再做出返回
但是现在运行起来它不返回 , 不知道为啥...
求助{:10_266:}

人造人 发表于 2022-4-28 23:21:11


void low(string &s){
      for(char i : s){
                i = tolower(i);
      }
}


for(char &i : s)

柿子饼同学 发表于 2022-4-29 15:02:42

人造人 发表于 2022-4-28 23:21
for(char &i : s)

还是没有输出qwq
谢谢

人造人 发表于 2022-4-29 17:10:04

#include <bits/stdc++.h>

using namespace std;

void low(string &s) {
    for(char &i : s) {
      i = tolower(i);
    }
}

string tar, temp = "***";   // tar是目标, temp临时变量
int tarsize, c = 0, l = 0;//第一个是目标的长度, c代表找到几次, l是实时更新的位置
vector<int> locate; //记录位置
bool isfind = false;

int main() {
    ios::sync_with_stdio(false);
    cin >> tar;
    low(tar);
    tarsize = tar.size();
    while(temp != "\0") {
      cin >> temp;
      if(!cin.good()) temp = "\0";
      low(temp);
      if(tar == temp) {
            isfind = true;
            c++;
            locate.push_back(l);
      }
      l += temp.size() + 1; //加一有空格
    }
    if(isfind) {
      cout << locate << ' ' << c;
    } else {
      cout << "-1";
    }
    cout << endl;
    return 0;
}
页: [1]
查看完整版本: 匹配字符串(这次是不同方法)