2017-07-13 54 views
-3

輸入:爲什麼我在輸入的第一行中輸入測試用例的數量後得到垃圾值?

輸入的第一行包含一個整數T代表的 測試用例的數量。

每個測試用例的唯一一行包含 名稱的空格分隔部分。

輸出

對於每種情況下,輸出的格式正確的名稱。

限制條件:

  • 1≤:T≤100
  • 2≤名稱的每個部分的長度≤10 名稱的每一部分包含字母從下和上殼英國 字母(即,從 'a' 到 'Z',或 'A' 到 'Z')

    ***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

這是因爲您不知道如何使用調試器來逐步執行您的代碼,每次執行一行代碼,並檢查每個步驟中所有變量的值,以查看代碼邏輯的工作方式,以及與您的預期結果不同。而且你還將'>>'與'std :: getline'混合在一起,[它不能像你期望的那樣工作](https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip格式化提取後輸入),這會觸發代碼中的所有錯誤。使用你的調試器。 –

+0

我不能這樣做,因爲我需要讀取字符串輸入中的空格,並且cin不會那樣做......所以用getline –

+0

你可以推薦一個替代方案嗎?@SamVarshavchik –

回答

0

有幾件事情

  • 讀取主計不消耗底線
  • 在格式化的循環是從0到主,包括閱讀次數的CIN。這是錯誤的。
  • 考慮toupper轉換爲uppper的情況。
  • 考慮因素分解處理1,2和3名稱的代碼。
+0

非常感謝!!!! –

相關問題