2014-02-02 2 views
0

У меня есть еще один вопрос, я хочу добавить _ перед каждым капитальным письмом, которое будет преобразовано в нижний регистр, плюс первая буква не может быть капиталом! Я не могу понять, как это сделать ...: {Пример:символы нижней строки и добавьте _ перед конвертированной заглавной линией

вход: loLollL, выход: lo_loll_l , и я хочу, чтобы идти в обратном направлении тоже: вход: lo_loll_l выход: loLollL

код здесь:

#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    const int max = 100; 
    string slovo; 
    int pocet_r; 

    cout << "Zadaj pocet uloh:" << endl; 
    cin >> pocet_r; 

    if(pocet_r >= 1 && pocet_r <=100) 
{ 

    // funkcia na zabezpecenie minimalneho poctu chars 
      for (int i = 0; i <pocet_r; i++) 
    { 
      cout << "Uloha " << i+1 << ":" << endl; 

       cin >> slovo; 

       if(slovo.size() > max) 
       { 
       cout << "slovo musi mat minimalne 1 a maximalne 100 znakov" << endl; 
       } 
       while(slovo.size() > max) 
       { 
        cin >> slovo; 
       }  

       for (int i=0; i <= slovo.size(); i++) 
       { 
        int s = slovo[i]; 
        while (s > 'A' && s <= 'Z') 
        { 
         if(s<='Z' && s>='A'){ 
         return s-('Z'-'_z'); 
         }else{ 

         cout << "chyba"; 

         } 
        } 


       } 


      cout << slovo[i] << endl; 

    } 

}else{ 
    cout << "Minimalne 1 a maximalne 100 uloh" << endl; 
} 
system("pause"); 
} 

EDIT>

for (int i=0; i <= slovo.size(); i++) 
      { 
       while (slovo[i] >= 'A' && slovo[i] <= 'Z') 
       { 
         string s = transform(slovo[i]); 

    cout << s << endl; 

    s = untransform(s); 

    cout << s << endl; 
} 
         } 
+0

1. Обратный результат не определяется однозначно, даже если '' 'запрещено в исходной строке,' lo_loll_l' может trnsform для 'loLollL' или' LoLollL'. 2. '' _z'' не является персонажем, это опечатка? – Nabla

+0

3. Почему вы возвращаетесь из 'main' в середине вашего кода? Это закончит программу. 4. Я не понимаю имена переменных и текст вывода. Это было бы проще, если бы вы перевели все на английский. 5. В какой-то момент вы должны назначить новую строку, вы никогда этого не сделаете. – Nabla

+0

Я обновил то, что должен сделать мой код, строка не может начинаться с заглавной буквы – frank17

ответ

0

Это должно работать:

#include <string> 
#include <cctype> 
#include <iostream> 

using namespace std; 

string 
transform(const string& s) 
{ 
    const size_t n = s.size(); 
    string t; 

    for (size_t i = 0; i < n; ++i) 
    { 
     const char c = s[i]; 

     if (isupper(c)) 
     { 
      t.push_back('_'); 
     } 

     t.push_back(tolower(c)); 
    } 

    return t; 
} 

string 
untransform(const string& s) 
{ 
    string t; 

    const size_t n = s.size(); 
    size_t i = 0; 

    while (i < n) 
    { 
     char c = s[i++]; 

     if (c != '_') 
     { 
      t.push_back(c); 
      continue; 
     } 

     c = s[i++]; 

     t.push_back(toupper(c)); 
    } 

    return t; 
} 

int 
main() 
{ 
    string s = transform("loLollL"); 

    cout << s << endl; 

    s = untransform(s); 

    cout << s << endl; 
} 
+0

спасибо, так что теперь я должен поместить его в заголовок (например, неверный ответ для кода-to-convert-between-java-camel-case-and-c-underscore-iden), который должен привести вас к правильному ответу. моего кода, а затем остальных в основную функцию? – frank17

+0

@feri Вы можете взять код для 'transform' и' untransform' как есть (+ дополнительные '# include'). Затем адаптируйте свою функцию' main' для вызова этих функции для применения преобразования к строкам, которые ваша программа чтение из 'cin'. – user3146587

+0

Я обновил свой код, но im получаю ошибку при вызове преобразования – frank17