这看起来像是作业,但请放心,这不是作业。这只是我们在C ++课程中使用的书中的一个练习,我正在尝试通读指针。

书中的练习告诉我将一个句子拆分为多个标记,然后将它们分别转换为猪拉丁语,然后显示它们。

这里的猪拉丁语基本上是这样的:球在猪拉丁语中变成allboy .. boy变成oybay ..取出第一个字母,在末尾加上“ ay”。

到目前为止,这就是我所拥有的:

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <cstring>
using std::strtok;
using std::strcat;
using std::strcpy;

void printPigLatin( char * );

int main()
{
    char sentence[500];
    char *token;

    cout << "Enter string to tokenize and convert: ";
    cin.getline( sentence, 500 );

    token = strtok( sentence, " " );

    cout << "\nPig latin for each token will be: " << endl;

    while( token != NULL )
    {
        printPigLatin( token );
        token = strtok( NULL, " " );
    }

    return 0;
}

void printPigLatin( char *word )
{
    char temp[50];

    for( int i = 0; *word != '\0';  i++ )
    {
        temp[i] = word[i + 1];
    }

    strcat( temp, "ay" );
    cout << temp << endl;
}


我很清楚地理解了标记化部分,但是我不确定如何做拉丁猪。.我试图先在标记中简单地添加“ ay”,然后看看结果将是什么..不确定为什么程序会进入一个无限循环,并继续显示“ ayay” ..任何提示?

编辑:这个现在可以正常工作,但是我不确定如何在添加“ ay”之前添加令牌的第一个字母

编辑:这就是我“看到”它完成的方式,但是不确定如何正确实现它..

最佳答案

您正在使用strcat运行输入字符串。您需要为每个令牌创建一个新的字符串,复制令牌并添加“ ay”,或者只打印令牌然后单击“ ay”。但是,如果您使用的是C ++,为什么不使用istream迭代器和STL算法?

07-24 09:52