c++ - 标记化并转换为 pig latin

标签 c++ tokenize

这看起来像是家庭作业,但请放心,这不是家庭作业。只是我们在 c++ 类(class)中使用的书中的一个练习,我正在尝试提前阅读指针。

书上的练习告诉我将一个句子拆分成标记,然后将它们中的每一个转换成 pig latin 然后显示它们..

这里的 pig latin 基本上是这样的:ball 变成 allboy in piglatin.. 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;
}

我非常清楚标记化部分,但我不确定如何做拉丁 pig ..我尝试从简单地向标记添加“ay”开始,看看结果会是什么..不确定为什么程序进入无限循环并继续显示“ayay”..有什么提示吗?

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

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

最佳答案

您正在使用 strcat 遍历您的输入字符串。您需要为每个标记创建一个新字符串,复制标记和“ay”,或者只打印标记然后打印“ay”。但是,如果您使用的是 C++,为什么不使用 istream 迭代器和 STL 算法呢?

关于c++ - 标记化并转换为 pig latin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/851351/

相关文章:

python - 在数据库中存储标记化文本?

c++ - 将 nullptr 参数委托(delegate)给模板代码中的指针重载

c++ - 当我尝试编译时,C++ 新手出现错误

c++ - HWND abc = 0x100;这行不通,我明白为什么。那怎么办呢?

batch-file - 对批处理文件中的字符串进行标记

elasticsearch - Elasticsearch自定义分析器,带有ngram并且在连字符上没有单词定界符

C++ - 包含文件太多? & 结构重定义?

c++ - 将父类(super class)函数作为非类型名模板参数传递

c++ - 在服务启动期间调用 CoCreateInstance

elasticsearch - 用于Elasticsearch的自定义 token 过滤器