PDA

View Full Version : مبتدی: بزرگ کردن حروف یکی در میان



Pois0nous
سه شنبه 02 تیر 1394, 21:18 عصر
سلام

یه کد دارم به این شکل:

Str UpperCase()
{
Str Result;
int i = 0;
for (; string[i]; i++)
{
if (string[i] <= 'z' && string[i] >= 'a')
{
string[i] -= 32;
}
Result.string[i] = string[i];
}
Result.string[i] = 0;
return Result;
}

این کد می گرده هر چی حرف کوچک هست رو بزرگ می کنه.
می خواستم ببینم اگر بخوام یکی در میون بزرگ کنه چه طوری هست؟ مثلا کاراکتر های زوج رو بزرگ کنه یا فرد.

ممنون

ehsan_faal
سه شنبه 02 تیر 1394, 23:00 عصر
سلام.
سعی کردم توش چیزای جدید رو استفاده کنم.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
enum class ZojYaFard{
ZOJ,
FARD
};
const string &Upper(string &Str,ZojYaFard ZF)
{
cout << "Before: " << Str << endl;
switch (ZF)
{
case ZojYaFard::ZOJ:
{
bool Flag = false;
for_each(Str.begin(), Str.end(), [&Flag](char& ch){
Flag = (!Flag);
if (Flag)
{
if (islower(ch))
ch = toupper(ch);
else
ch = tolower(ch);
}});
cout << "After: " << Str << endl;
break;
}
case ZojYaFard::FARD:
{
bool Flag = true;
for_each(Str.begin(), Str.end(), [&Flag](char& ch){
Flag = (!Flag);
if (Flag)
{
if (islower(ch))
ch = toupper(ch);
else
ch = tolower(ch);
}});
cout << "After: " << Str << endl;
break;
}
default:
break;
}
return Str;
}
void main()
{
string Str("barnamenevis.org");
Upper(Str, ZojYaFard::FARD);
Upper(Str, ZojYaFard::FARD);
Upper(Str, ZojYaFard::ZOJ);
Upper(Str, ZojYaFard::ZOJ);
system("pause");
}

خروجی:
Before: barnamenevis.org
After: bArNaMeNeViS.OrG
Before: bArNaMeNeViS.OrG
After: barnamenevis.org
Before: barnamenevis.org
After: BaRnAmEnEvIs.oRg
Before: BaRnAmEnEvIs.oRg
After: barnamenevis.org
اگه دوبار از یه حالت پشت سر هم استفاده بشه کارکترهایی که تغییر حالت دادند ریست میشن.