这个Pig Latin程序有什么问题?

时间:2016-08-29 23:14:56

标签: c++

它应该做什么

我的小猪程序应该从用户输入中取出一个短语并将其输出到猪拉丁语中。基本上它会变成诸如"你好"进入" ellohay"。

我的问题

当我输入hello my man时,输出为ellohay y man an may,当我输入hello my时,输出为ellohay y may。正如你所看到的,在成功翻译第一个单词之后,它在第二个单词上挣扎。它在y之后放置了一个空格may我无法弄明白为什么这种情况一直在发生。如上所示,当我输入两个以上的单词时,输出甚至更奇怪。我想要发生的是当我输入ellohay ymay anmay时输出hello my man。代码如下。谢谢!

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

void phrase_Parser(string); // Goes through phrase and looks for ' ' to then pass to pigLatin_Translator()
void pigLatin_Translator(string);
int main()
{
    string phrase; //used for user word or phrase to be translated to piglatin
    cout << "Enter any word: ";
    getline(cin, phrase); 

    phrase_Parser(phrase);
    return 0;
}

void phrase_Parser(string phrase) {
    int startCount = 0;

    for (int i = 0; i < phrase.length(); i++) {
        if (phrase[i] == ' ') {

            string word = phrase.substr(startCount, i);
            startCount = (i + 1); // decides where to start the word next time it is ran through

            pigLatin_Translator(word); // runs word through translator
        }
    }
}
void pigLatin_Translator(string word) {
    string partOne;
    string partTwo;

    for (int x = 0; x < word.length(); x++) {
        if (word[0] == 'q' && word[1] == 'u') {
            cout << word.substr(2, word.length()) << word.substr(0, 2) << "ay ";
            break;
        }
         else if ((word[x] == 'a') || (word[x] == 'e') || (word[x] == 'i') || (word[x] == 'o') || (word[x] == 'u') || (word[x] == 'y')) {
            partOne = word.substr(x, word.length()); //from first vowel to end of word
            partTwo = word.substr(0, x); // from first letter to first vowel, not including the vowel
            cout << partOne << partTwo << "ay "; // adding "ay" to the end of the word
            break;  
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您的问题在string word = phrase.substr(startCount, i);

您错误地使用了substrsubstr的第二个参数是您要提取的子字符串的长度。将i替换为i-startCount,您应该好好去。

或者,搜索一种更好的分割字符串的方法。有许多选项比手动操作容易得多。