-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);
}
這是因爲您不知道如何使用調試器來逐步執行您的代碼,每次執行一行代碼,並檢查每個步驟中所有變量的值,以查看代碼邏輯的工作方式,以及與您的預期結果不同。而且你還將'>>'與'std :: getline'混合在一起,[它不能像你期望的那樣工作](https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip格式化提取後輸入),這會觸發代碼中的所有錯誤。使用你的調試器。 –
我不能這樣做,因爲我需要讀取字符串輸入中的空格,並且cin不會那樣做......所以用getline –
你可以推薦一個替代方案嗎?@SamVarshavchik –