2013-03-04 4 views
1

Наконец я найти решения в новообращенного lowecase в верхний регистр и идентифицировать строку, является ли алфавит или числовой код следующим образом:C++ цикл по строке

#include <cctype> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    char ch; 
    cout<<"Enter a character: "; 
    gets(ch); 

    if (isalpha (ch)) { 
    if (isupper (ch)) { 
     ch = tolower (ch); 

     cout<<"The lower case equivalent is "<< ch <<endl; 
    } 
    else { 
     ch = toupper (ch); 
     cout<<"The upper case equivalent is "<< ch <<endl; 
    } 
    } 
    else 
    cout<<"The character is not a letter"<<endl; 
    cin.get(); 
} 

Как я могу улучшить код выше, чтобы получить строку, а не один символ? Цикл повторяет одни и те же утверждения многократно. Благодаря

+0

Что имеется в виду под заголовком «Цикл» позволяет печатать одни и те же утверждения много раз »? – Asha

+0

Несвязанная ошибка: вы не можете вызывать функции в '' с помощью 'char'. Сначала вы должны преобразовать в 'unsigned char' или перенести неопределенное поведение. –

+1

@JamesKanze, действительно ли у вас есть документы, указывающие на то, что преобразование в unsgined char действительно требуется? Я нашел ссылку [tolower()] (http://www.cplusplus.com/reference/cctype/tolower/) с примером, где используется символ «char». – kamituel

ответ

2

Обновление: Вот более чистое решение, которое выводит одно, одно слово.

#include <cctype> 
#include <iostream> 
#include <algorithm> 
using namespace std; 

char switch_case (char ch) { 
    if (isalpha (ch)) { 
     if (isupper (ch)) { 
     return tolower (ch); 
    } 
    else { 
     return toupper (ch); 
    } 
    } 
    return '-'; 
} 

int main() 
{ 
    string str; 
    cout<<"Enter a word: "; 
    cin >> str; 

    transform(str.begin(), str.end(), str.begin(), switch_case); 
    cout << str << "\n"; 
} 

std::transform В этом примере используется std::transform.


Просто читать слово целиком и использовать std::string::iterator перебирать одну букву в то время:

#include <cctype> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    string str; 
    cout<<"Enter a word: "; 
    cin >> str; 

    for (string::iterator it = str.begin(); it != str.end(); ++it) { 
    char ch = *it; 
    if (isalpha (ch)) { 
     if (isupper (ch)) { 
     ch = tolower (ch); 

     cout<<"The lower case equivalent is "<< ch <<endl; 
    } 
    else { 
     ch = toupper (ch); 
     cout<<"The upper case equivalent is "<< ch <<endl; 
    } 
    } 
    else 
    cout<<"The character is not a letter"<<endl; 
} 
cin.get(); 
} 
+0

Не работает ... только конвертируйте первую букву как upercase, если строка содержит любой строчный регистр, она преобразует только первую букву в верхний регистр. Нужно преобразовать все нижние в верхние –

+0

Не верно. Все слово преобразуется, потому что я действительно не изменил ваш алгоритм, просто добавил цикл for. – kamituel

+0

результат: Введите персонаж: sasas Эквивалент в верхнем регистре S –

2

Елки использовать оператор ввода для чтения в строку:

std::string input; 
std::cin >> input; 

При желании вы можете использовать std::getline, чтобы получить больше, чем одно слово.

Затем вы можете использовать std::transform для преобразования строки в верхний или нижний регистр.

Вы также можете использовать range-based for loop для перебора символов в строке.

+1

Использование 'std :: stransform' может быть немного сложным, так как вы не можете передать его' toupper' или 'tolower' напрямую. Любой профессиональный программист, который занимается символьными данными, будет иметь необходимые функциональные объекты в своем наборе инструментов и использовать их, но это больше похоже на учебное упражнение, чем на проблему, с которой сталкивался профессиональный программист в своей работе. –

1

C++ 11:

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

using namespace std; 

int main() 
{ 
    string s; 
    cout << "Enter data: "; 
    cin >> s; 

    for (auto &ch : s) 
    { 
     if (isalpha(ch)) 
     { 
      if (isupper(ch)) 
      { 
       ch = tolower(ch); 
       cout << "The lower case equivalent is " << ch << endl; 
      } 
      else 
      { 
       ch = toupper(ch); 
       cout << "The upper case equivalent is " << ch << endl; 
      } 
     } 
     else 
      cout << "The character is not a letter" << endl; 
    }; 
    cin.get(); 
} 

или

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

using namespace std; 
int main() 
{ 
    string s; 
    cout << "Enter a string: "; 
    cin >> s; 

    transform(s.begin(), s.end(), s.begin(), [](char ch) 
    { 
     return isupper(ch)? tolower(ch) : toupper(ch); 
    }); 
} 

Если у вас есть g++ попыток: g++ test.cpp -o test -std=c++11 компилировать.

Смежные вопросы