-3
入力:入力の最初の行にテストケースの数を入力した後にガベージ値が表示されるのはなぜですか?
入力の最初の行は テストケースの数を表す整数値Tを含んでいます。
各テストケースの唯一の行には、 のスペースで区切られた部分が含まれています。それぞれの場合について
出力
、出力適切にフォーマット名。
制約:
- 1≤T名の各部分 10≤名の各部分の長さ
2≤100≤は、下部と上部ケースの文字が含まれています英語 アルファベット(すなわち、 'Z' と '' を 'Z'、または 'A' から)
***Input*** 3 gandhi mahatama gandhi mohandas karamchand gandhi ***Expected Output:*** Gandhi M.Gandhi M.K.Gandhi ***My output:*** à Gandhi M.Gandhi M.K.Gandhi
最初の行に「à」記号が表示されるのはなぜですか? 私は、テストケースのforループを提供する関数フォーマッタを作成しました。
コードがあまりにもクールである場合は、事前にお詫び申し上げます。
#include<bits/stdc++.h>
using namespace std;
int z;
void formatter(int z){
for(int q = 0;q <= z;q++){
string s;
int count=0;
int k = 0,p = 0,r = 0,t = 0,l = 0,a = 0,x = 0 ;
getline(cin,s);
for(int p = 0;p <= s.size();p++){
if((s[p]==' ')||(p==0)){
count++;
}
}
if(count == 1){
while(r<=s.size()){
s[0] = s[0] -'a' + 'A';
cout << s[r] ;
r++;
}
cout << "\n";
}
if(count == 2){
for(int l = 0;l<s.size();l++){
if(l==0){
s[l] = s[l] -'a' + 'A';
cout << s[l] << ".";
a++;
}
if(s[l]==' '){
if(a==1){
++l;
while(l <= s.size()){
if(x == 0){
s[l] = s[l] -'a' + 'A';
}
cout << s[l] ;
a++;
l++;
x++;
}
}
}
}
cout << "\n";
}
if(count==3){
for(int i=0;i<s.size();i++){
if(i==0){
s[i] = s[i] -'a' + 'A';
cout << s[i] << ".";
t++;
}
if(s[i]==' '){
if(t==1){
++i;
s[i] = s[i] -'a' + 'A';
cout << s[i] << ".";
t++;
}
else
while(k<=10){
if(k==1){
s[i] = s[i] -'a' + 'A';
}
cout << s[i];
i++;
k++;
}
}
}
}
}
cout << "\n";
}
int main(){
cin >> z;
formatter(z);
}
デバッガを使用して一度に1行ずつコードをステップ実行し、各ステップですべての変数の値を調べてコードのロジックがどのように機能するかを知る必要がないからです期待した結果とは異なります。また、あなたは '' ''を 'std :: getline'と混在させていますが、これは動作するとはうまくいきません。(https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip -input-after-a-formatted-extraction)は、コード内のすべてのバグを引き起こします。デバッガを使用してください。 –
文字列入力のスペースを読み込む必要があるので、私はそれを行うことができません。cinはそれをしません... getlineを使用しました –
代替案を提案できますか?@SamVarshavchik –