```cpp
#include<bits/stdc++.h>
using namespace std;
bool flag;
string a,b;
int la,lb,c,d;
int main() {
getline(cin,a);
getline(cin,b);
a=" "+a+" ";
b=" "+b+" ";
for(int i=1; i<=la; i++) {
if(64<a[i]&&a[i]<91) {
a[i]+=32;
}
}
for(int i=1; i<=lb; i++) {
if(64<b[i]&&b[i]<91) {
b[i]+=32;
}
}
for(int i=0; i<lb; i++) {
if(b[i]!=' ') {
continue;
}
flag=1;
for(int j=0; j<=la; j++) {
if(a[i]!=b[i]) {
flag=0;
break;
}
}
if(flag) {
c++;
if(!~d) {
d=i;
}
}
}
if(!~d) {
cout<<d<<'\n';
} else {
cout<<c<<" "<<d<<"\n";
}
return 0;
}
```
这是改的,还是不对
by kevin3 @ 2023-02-28 21:50:34
用样例解释:
* 输入是
```plain
|To
to be or not to be is a question
```
其中的光标 `|` 表示当前输入流的位置。
* `cin >> a` 输入光标后紧随的一个单词(a ← “`To`”),并移动光标到单词后面:
```plain
To|
to be or not to be is a question
```
* `getline(cin, b)` 输入光标所在行的剩余内容(b ← “` `”),并移动光标到下一行开头。
```plain
To
|to be or not to be is a question
```
这样出错了。
修正的办法是在合适的位置加一句 `cin.ignore(numeric_limits<streamsize>::max(), '\n')`(它会直接把光标移动到下一行开头,不进行输入)。
by ud2_ @ 2023-02-28 21:58:07
另外注意回车,[它和换行不是同一个东西](/blog/_post/285227)。
by ud2_ @ 2023-02-28 21:59:30
@[ud2_](/user/206953) WA
by kevin3 @ 2023-02-28 22:04:25
@[ud2_](/user/206953) 打两行之后不输出了
by kevin3 @ 2023-02-28 22:06:52
@[kevin3](/user/735452) 后面还有些越界或者没初始化之类的小错误,仔细看。
by ud2_ @ 2023-02-28 22:12:27
@[ud2_](/user/206953) 可是之前输出啊
by kevin3 @ 2023-02-28 22:14:38
@[kevin3](/user/735452) 有输出不能说明代码对。
```diff
@@ -2,29 +2,37 @@
using namespace std;
bool flag;
string a,b;
-int la,lb,c,d;
+int la,lb,c,d=-1;
int main() {
getline(cin,a);
getline(cin,b);
+ if (!a.empty() && a.back() == '\r') {
+ a.pop_back();
+ }
+ if (!b.empty() && b.back() == '\r') {
+ b.pop_back();
+ }
a=" "+a+" ";
b=" "+b+" ";
- for(int i=1; i<=la; i++) {
+ la=a.length();
+ lb=b.length();
+ for(int i=0; i<la; i++) {
if(64<a[i]&&a[i]<91) {
a[i]+=32;
}
}
- for(int i=1; i<=lb; i++) {
+ for(int i=0; i<lb; i++) {
if(64<b[i]&&b[i]<91) {
b[i]+=32;
}
}
- for(int i=0; i<lb; i++) {
+ for(int i=0; i<lb-1; i++) {
if(b[i]!=' ') {
continue;
}
flag=1;
- for(int j=0; j<=la; j++) {
- if(a[i]!=b[i]) {
+ for(int j=0; j<la; j++) {
+ if(a[j]!=b[i+j]) {
flag=0;
break;
}
```
by ud2_ @ 2023-02-28 22:19:44
```cpp
#include<bits/stdc++.h>
using namespace std;
bool flag;
string a,b;
int la,lb,c,d=-1;
int main() {
getline(cin,a);
getline(cin,b);
a=" "+a+" ";
b=" "+b+" ";
la=a.size();
lb=b.size();
for(int i=1; i<=la; i++) {
if(64<a[i]&&a[i]<91) {
a[i]+=32;
}
}
for(int i=1; i<=lb; i++) {
if(64<b[i]&&b[i]<91) {
b[i]+=32;
}
}
for(int i=0; i<lb; i++) {
if(b[i]!=' ') {
continue;
}
flag=1;
for(int j=0; j<=la; j++) {
if(a[j]!=b[i]) {
flag=0;
break;
}
}
if(flag) {
c++;
if(!~d) {
d=i;
}
}
}
if(!~d) {
cout<<d<<'\n';
} else {
cout<<c<<" "<<d<<"\n";
}
return 0;
}
```
20
by kevin3 @ 2023-02-28 22:25:32