[英]C++ - Capitalize the first Character for each word in the given string
我有一個字符指針,然后我將它轉換為字符串格式。 所以我想把這個字符串中每個單詞的第一個字符大寫,我寫了下面的代碼:
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <time.h>
#include <string>
using namespace std;
void transform(char *s);
int main(int argc, char const *argv[])
{
char *str = new char[255];
strcpy(str, "jimmy catter");
string s;
s+=str; //convert char to string
std::cout<<s<<endl;
for (int i = 0; i < s.length(); ++i)
{
if (s[i] == ' ')
{
if (islower(s[i+1])==1)
{
s[i+1] = toupper(s[i+1]);
}
}
}
std::cout<<s<<endl;
return 0;
}
我希望輸出應該是 "Jimmy Catter" ,但我得到的結果仍然是較低的格式。 你能幫忙看看嗎?
所以基本上,這里有兩件事:
islower()
應該被視為它返回一個bool
,即使它說它返回一個int
。 這是因為對於一個bool
,實際值是false
,如果0和true
,如果不為0的,這意味着如果你想還是比較數值,你會說的任何值islower(s[i]) != 0
,因為1 不是true
的唯一有效內部值。#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <time.h>
#include <string>
using namespace std;
void transform(char *s);
int main(int argc, char const *argv[])
{
char *str = new char[255];
strcpy(str, "jimmy catter");
string s;
s+=str; //convert char to string
std::cout<<s<<endl;
for (int i = 0; i < s.length(); ++i) {
if (i == 0 || s[i - 1] == ' ') {
if (islower(s[i])) {
s[i] = toupper(s[i]);
}
}
}
std::cout<<s<<endl;
return 0;
}
這里要注意的第一件事是,如果參數是小寫而不是 1,則islower
返回非零(> 0)數字。
其次,您試圖通過檢查 char 之前是否為whitespace
來大寫 char 。 這種方法沒有錯,但它不適用於第一個字符,因此您可以通過在循環之前添加額外的行來實現。 因此,通過一些調整,它現在可以正常工作:
#include <iostream> #include <cstring> #include <stdlib.h> #include <time.h> #include <string> using namespace std; // void transform(char *s); int main(int argc, char const *argv[]) { string s = "jimmy catter "; /* char *str = new char[255]; strcpy(str, "jimmy catter"); string s; s+=str; //convert char to string */ std::cout<<s<<endl; s[0]=toupper(s[0]); for (int i = 0; i < s.length()-1; ++i) { if (s[i] == ' ') { if (islower(s[i+1])>=1) { s[i+1] = toupper(s[i+1]); } } } std::cout<<s<<endl; return 0; }
您可以使用 ASCII 符號,因為它們在此類程序中很容易理解和執行。 我在循環部分稍微修改了你的代碼,它給出了正確的輸出。 看看它。
for (int i = 0; i < s.length(); ++i)
{
if(!i&&97<=s[i]<=122) //handles border condition where first letter is small case
{
s[i] = s[i]-32;
}
if ((i!=s.length-1)&&s[i] == ' ') //prevents invalid output where last character is a space
{
if (97<=s[i+1]<=122) //checks if letter after space is small case
{
s[i+1] = s[i+1]-32;
}
}
}
std::cout<<s<<endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.