2017-07-13 10 views
-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); 
} 
+0

デバッガを使用して一度に1行ずつコードをステップ実行し、各ステップですべての変数の値を調べてコードのロジックがどのように機能するかを知る必要がないからです期待した結果とは異なります。また、あなたは '' ''を 'std :: getline'と混在させていますが、これは動作するとはうまくいきません。(https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip -input-after-a-formatted-extraction)は、コード内のすべてのバグを引き起こします。デバッガを使用してください。 –

+0

文字列入力のスペースを読み込む必要があるので、私はそれを行うことができません。cinはそれをしません... getlineを使用しました –

+0

代替案を提案できますか?@SamVarshavchik –

答えて

0

いくつ

  • メインでカウントがフォーマッタのループは0から、メイン包括的に読ん数にある終了行
  • を消費しない読み込みCIN。これは間違っています。
  • uppperケースに変換するトゥーパーを検討してください。
  • 1,2,3の名前を扱うコードを分解することを検討してください。
+0

ありがとうございました!!!! –

関連する問題