C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Первая заглавная  (Прочитано 3444 раз)
Ravil
НЕ стыдно не знать стыдно не учится
Участник


Сказали спасибо: +2/-2
Offline

Сообщений: 167


Первая заглавная
« : 16 Сентябрь 2013, 10:56:26 »

Доброго всем дня. Ребят помогите пожалуйста перевести с Делфи на С++.Есть вот такой кодик
Код:
Edit1.Text := AnsiUpperCase(Copy(Edit1.Text,1,1)) +
Copy(Edit1.Text,2,Length(Edit1.Text)-1);
Накидал вот так
Код:
Edit1->Text==AnsiUpperCase(Copy(Edit1->Text,1,1))+Copy(Edit->Text,2,Length(Edit1->Text)-1);
, но думаю что вообще не правильно.
                                                                                                                                     За ранее спасибо....
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Первая заглавная
« Ответ #1 : 16 Сентябрь 2013, 11:11:03 »

Код
       String s = "dvkvjkenvjknev";
s = s.SubString(1, 1).UpperCase() + s.SubString(2, s.Length());
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: Первая заглавная
« Ответ #2 : 16 Сентябрь 2013, 12:56:35 »

Код
s[1] = AnsiUpperCase(s[1])[1];
уже совсем просто, прямо неприлично?

Вообще, у Джедаев есть функция
Код
function StrSmartCase(const S: string; Delimiters: TSysCharSet): string;
var
 i: integer;
begin
 // if no delimiters passed then use default set
 if Delimiters = [] then
   Delimiters := AnsiWhiteSpace;
 Result := S;
 for i := 1 to Length(Result) do
   if (i = 1) or (Result[i - 1] in Delimiters) then
     Result[i] := UpCase(Result[i]);
end;
Которая работает именно по такому принципу: ищет первый символ после разделителя (или первый в строке), и изменяет его регистр...
« Последнее редактирование: 16 Сентябрь 2013, 13:31:22 от volvo877 » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Первая заглавная
« Ответ #3 : 17 Сентябрь 2013, 09:39:29 »

Или старым добрым C. Пример:
Код
#include 
#include
#include
 
using namespace std;
 
const int MAXSTR = 256;
 
void CamelBack(char* str)
{
   char* pch = str;
   while(*pch!='\0') {
       if(!isspace(*pch) && (pch==str || isspace(*(pch-1))))
           *pch = toupper((int)*pch);
       pch++;
   }
}
 
int main()
{
   do {
       fflush(stdin);
       printf("Enter a string (max %d chars): ", MAXSTR);
       char str[MAXSTR];
       fgets(str, MAXSTR, stdin);
       CamelBack(str);
       printf("CamelBack string: %s\tAgain? (y/n) ", str);
   } while(tolower(getc(stdin))=='y');
 
   return 0;
}
 

PS. Для поддержки Юникода, надо включить tchar.h и использовать TCHAR (или _TCHAR) вместо char, а также floating functions вместо стандартных библиотечных функций (_gettc, _fgetts, _tprintf, _istspace и т.п.).
« Последнее редактирование: 17 Сентябрь 2013, 09:51:04 от S0mbre » Записан
Day
Участник


Сказали спасибо: +11/-1
Offline

Сообщений: 137


« Ответ #4 : 21 Сентябрь 2013, 18:16:04 »

"==" - это сравнение
Присваивание в Си это "=" (эквивалент паскалевскому ":=")
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.076 секунд. Запросов: 19.