2014-01-06 3 views
-2

Этот код дает мне много странных ошибок. По какой-то причине функция «newstring» не работает. Я думаю, что это может иметь какое-то отношение к тому факту, что это часть инструкции cout, потому что, если я правильно помню, она не дает ту же ошибку, если я вызываю функцию независимо от инструкции cout. Программа требует строковой функции, но по какой-то причине новая функция не работает. Может ли кто-нибудь взглянуть на код?Функция PigLatin C++

#include <iostream> 
    #include <string> 

    using namespace std; 

    void newstring(string); 
    bool isVowel(char ch); 
    string rotate(string pStr); 
    string pigLatinString(string pStr); 

    int main() 
    { 
     string str; 

     cout << "Enter a sentence to be translated to Pig Latin: "; 
     getline(cin, str); 
     cout << endl; 

     cout << "The pig Latin form of " << str << " is: " << newstring(str); 

     system("PAUSE"); 
     return 0; 

    } 

    bool isVowel(char ch) 
    { 
     switch(ch) 
     { 
      case 'A': 
      case 'E': 
      case 'I': 
      case 'O': 
      case 'U': 
      case 'Y': 
      case 'a': 
      case 'e': 
      case 'i': 
      case 'o': 
      case 'u': 
      case 'y': 
       return true; 
      default: 
       return false; 
     } 
    } 
    string rotate(string pStr) 
    { 
     string::size_type len = pStr.length(); 
     string rStr; 
     rStr = pStr.substr(1, len - 1) + pStr[0]; 
     return rStr; 
    }  
    string pigLatinString(string pStr) 
    { 
     string :: size_type len; 
     bool foundVowel; 
     if (isVowel(pStr[0])) 
      pStr = pStr + "-way"; 
     else 
      { 
       pStr = pStr + '-'; 
       pStr = rotate(pStr); 
       len = pStr.length(); 
       foundVowel = false; 

      for (int counter = 1; counter < len - 1; counter++) 
       { 
         if (isVowel(pStr[0])) 
       { 
        foundVowel = true; 
        break; 
       } 
       else 
        pStr = rotate(pStr); 

       if (!foundVowel) 
        pStr = pStr.substr(1, len) + "-way"; 
        else  
        pStr = pStr + "ay"; 
       } 
       return pStr; 
      } 
    } 

    string newstring(string sentence) 
    { 
     string newsentence, currentword; 

     for (int i = 0; i < sentence.length(); i++) 
     { 
      if (sentence[i]==' ') 
      { 
       pigLatinString(currentword)+" "; 
       currentword.clear(); 
      } 
      else 
      { 
       currentword+=sentence[i]; 
      } 
     } 
     return newsentence; 
    } 
+0

@Cory, Ли помог фиксируя мой ответ вы выдаете? –

ответ

1

Ваш прототип newstring ошибочен.

void newstring(string); 

Должно быть

string newstring(string); 
+0

Я думаю, что это было частью проблемы. Он все еще работает неправильно. –

+0

Что не работает ..? Я мог бы скомпилировать его успешно. У вас возникла новая ошибка или проблема времени выполнения? –

0

Функция NewString объявлен как имеющий тип пустот

void newstring(string); 

Вы не можете создавать объекты типа аннулируются и отправить их в выходной поток

cout << "The pig Latin form of " << str << " is: " << newstring(str); 

Кроме того, функция не имеет определения, так как вы определили еще одну функцию с тем же именем, но возвращающегося станд :: строка

string newstring(string sentence) 
                ^^^^^^^^^^^^^^^^^^ 
0
pigLatinString(currentword)+" "; 

pigLatinString возвращает строку, но ничего с этим результатом не делать.

newstring возвращает новость, но пуста.

Возможно, вам следует заполнить новостной бюллетень тем, что возвращается с pigLatinString?

О, и теперь я замечаю, у вас есть два newstring сек ... пустота и струнные ...

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