我有一個問題,我的代碼不能夠大寫第一個字符串後的任何字符串的第一個字母,並且不顯示字符串的最後一個字。該代碼使用linux重定向從輸入文件中讀取一系列標題。每個單詞的第一個字母需要大寫,其餘的都是小寫,每個單詞需要用一個黑色空格分隔。這是測試數據的輸出:隱形字符出現在字符串的新行
The 5th the Cat In The one Fish Two Fish Red Fish Blue
還要注意如何存在和第5和魚和紅之間的兩個空格
#include <iostream>
#include <iomanip>
#include <cctype>
#include <string>
using namespace std;
void reform (string& imup);
int main()
{
string word;
string temp = " ";
string letters;
getline(cin,letters);
int length;
length = 0;
word = "";
while (cin)
{
length = letters.size();
for (int i =0; i < length; i++)
{
if (letters[i] != ' ' && letters[i] != '\n')
{
word = word + letters[i];
}
else if ((letters[i] == ' ' && isalpha(letters[i-1])) ||
(letters[i] == ' ' && isalpha(letters[i+1])))
{
reform(word);
cout<< word <<" " ;
word = "";
}
else if ((letters[i] == ' ' && isdigit(letters[i-1])) ||
(letters[i] == ' ' && isdigit(letters[i+1])))
{
reform(word);
cout<< word <<" " ;
word = "";
}
}
cout<< endl;
getline(cin,letters);
}
return 0;
}
void reform (string& imup)
{
int size;
// cout <<"hi ";
size = imup.length();
imup[0] = toupper(imup[0]);
for (int i=1; i < size; i++)
imup[i] = tolower(imup[i]);
}
請編輯您的帖子,並正確縮進代碼。隨機縮進使得其邏輯難以遵循。 –
(不相關)使用'while(getline(..))'而不是兩次調用'getline'。 –
您可以將isalpha和isdigit的測試合併到||中。 (這樣你就不需要重複合併)。如果一行的第一個字符是空格,這將炸燬。如果空格之前的字符既不是字母也不是數字(如$,@或*),會發生什麼情況。 –