1,2,3,4,5,6,7番目の文字が正しく入力されている、と趣旨に沿った答えがきちんと出力できています。
問題文をよく読んでください。出力の形式が違いますよ。
(コンパイルエラーの warning は、直接関係ありません)
Like!
Atcoder Begginer Contest 352のB問題について、エラーが出て正解となりません。どなたか知恵をお貸しください。
https://atcoder.jp/contests/abc352/tasks/abc352_b
問題については上のリンクを参照ください。
Main.cpp: In function ‘int main()’:
Main.cpp:20:17: warning: comparison of integer expressions of different signedness: ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
20 | if(T.size() == p){
| ~~~~~~~~~^~~~
#include<iostream>
#include<string>
using namespace std;
int main(){
string S;
string T;
cin >> S >> T;
int i = 0;
int p = 0;
int go = 1;
while(go){
if(S[i] == T[p]){//一致したら
cout << p + 1 ;//そのままpを出力すると-1ずれるので、+1する。
i = i + 1;//両方一つずらす
p = p + 1;
}
else{
p = p + 1;//一つずらし、後ろに一致する文字がないか探します
}
if(T.size() == p){//もしTの文字列を全て探索したのなら
go = 0;//ループをぬける
}
}
}
プログラム上の不備かと思い、
https://atcoder.jp/contests/abc352/tasks/abc352_b
の入力例をいくつか試しました。(次に出てくる例は入力例3のものです。)
しかし、
1,2,3,4,5,6,7番目の文字が正しく入力されている、と趣旨に沿った答えがきちんと出力できています。テストコードでは上手くいくのに、どうしてなのでしょうか。
cout << p + 1 ;
cout << p + 1 << " ";
どうやら出力形式が間違っていました。空白を挿入すれば正しく動きました。
1,2,3,4,5,6,7番目の文字が正しく入力されている、と趣旨に沿った答えがきちんと出力できています。
問題文をよく読んでください。出力の形式が違いますよ。
(コンパイルエラーの warning は、直接関係ありません)
@nama40024
Questionerありがとうございます。お恥ずかしい限りです。空白を入れて出力したらACとなりました。お手数おかけしました。
自分なら以下のよう書きます。
(シンプルなコードを好みます)
#include <iostream>
using namespace std;
int main(void){
string S, T;
cin >> S >> T;
int s = 0;
for(int t=0; t<T.size(); t++){
if(S[s] == T[t]){
cout << t + 1 << ' ';
s += 1;
}
}
return 0;
}