猪拉丁转换器使用toupper

时间:2016-04-29 04:28:30

标签: c++ string loops character

我在使用toupper转换为字符串中的第一个字符时遇到了问题。

我使用tolower(first[0])将第一个字母变为小写。

为什么toupper(first[0])不会使第一个字符成为大写?

另外,有没有办法将字符串中的第一个字符移动到最后一个位置?

提前多多感谢。

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

int main ()
{

  char ans;

  do{

    string first, last;
    char first_letter, first_letter2;

    cout << "This program will convert your name " 
     << "into pig latin.\n";
    cout << "Enter your first name: \n";
    cin >> first;
    cout << "Enter your last name: \n";
    cin >> last;

    cout << "Your full name in pig latin is ";

    for(int x = 0; x < first.length(); x++){
      first[x] = tolower(first[x]);
    }

    for(int x = 0; x < last.length(); x++){
      last[x] = tolower(last[x]);
    }

    first_letter = first[0];

    bool identify;

    switch (first_letter)
      {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
    identify = true;
    break;

      default:
    identify = false;
      }

    if(identify == true){
      toupper(first[0]);

      cout << first << "way" << " ";
    }

    first_letter2 = last[0];

    bool identify2;

    switch (first_letter2)
      {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
    identify2 = true;
    break;

      default:
    identify2 = false;
      }

    if(identify2 == true){
      toupper(first[0]);

      cout << last << "way" << endl;
    }

    cout << "You you like to try again? (Y/N)\n";
    cin >> ans;

  } while(ans == 'y' || ans == 'Y');

  return 0;

}

1 个答案:

答案 0 :(得分:2)

只是一个简单的错误,比较

first[x] = tolower(first[x]);

toupper(first[0]);

通常情况下'看不到明显的遗漏'综合症......我讨厌那些错误。

至于将第一个字符移到最后,我通常只使用substr()来表示一个简单的情况:

str = str.substr(1) + str[0];