C++ 使用指针在2d数组中提前递增一个字

C++ 使用指针在2d数组中提前递增一个字,c++,C++,我正在写一个程序来阅读一段文字,并把它放在正确的语法中。文本中的所有标点符号和换行符前面都有“:”。我的程序的功能之一是在从文本文件读取的单词之间添加空格。然而,我不希望它一直这样做。因为“:”标记句子的结尾是一个新词,而不是前一个词的一部分,所以它会在最后一个词和句点之间添加一个空格 “…在动物园。” 与此相反: “…在动物园。” 我正在尝试编写一个函数,查看数组中的下一个单词是否是冒号。 以下是我尝试过的,其中包括: int isColon(char madLib[][256], int n

我正在写一个程序来阅读一段文字,并把它放在正确的语法中。文本中的所有标点符号和换行符前面都有“:”。我的程序的功能之一是在从文本文件读取的单词之间添加空格。然而,我不希望它一直这样做。因为“:”标记句子的结尾是一个新词,而不是前一个词的一部分,所以它会在最后一个词和句点之间添加一个空格

“…在动物园。”

与此相反:

“…在动物园。”

我正在尝试编写一个函数,查看数组中的下一个单词是否是冒号。 以下是我尝试过的,其中包括:

int isColon(char madLib[][256], int numWords)
{
    numWords++;
    char* k = madLib[numWords];
    if (*k == ':')
    {
        cout << "{*k}";
        return true;
    }
    else
        return false;
}
int-isColon(char-madLib[][256],int-numWords)
{
numWords++;
char*k=madLib[numWords];
如果(*k==':')
{
cout>madLib[numWords])
{
bool-isSpace=true;
bool noPrint=假;
char*k=madLib[numWords];
while(*k)
{
如果(*k==':')
{
k++;
如果(*k=='!')

依我拙见,主要的问题是你仍然在完全C风格的模式下工作。所有的错误都是由这种模式造成的

使用指针和C样式数组。建议:在C++中使用<强> > < /强>,不要在C++内存中使用原始指针。< /P>

推荐:做<强>不>强>使用C++中的C样式数组(或仅当你知道你在做什么)。

顺便说一句:将2d数组(首先不应该使用)传递给函数时使用了错误的语法。数组正在衰减为指针

使用魔法数字256,您将面临巨大的越界问题风险

但您的具体问题是由错误的设计造成的。您阅读了一个单词,然后在阅读下一个单词之前,您已经检查了这个不存在的单词

查看您的代码。您正在执行
fin>>某个操作,然后对该操作进行操作,然后调用子函数检查下一个单词。但这还没有被读取

因此,建议是:首先将所有单词读入数组,然后检查数组内容


我希望这有帮助

您在代码中的什么地方显示了什么?现在我只看到输出了
“{*k}”
。“我需要它来查看下一个单词”您需要查看下一个单词的内容?函数?函数仅检查特定的…
char*
是否以
开头?好问题。显示修订后的“语法改进”的代码文本在另一个函数中。我将编辑文章,以便您查看这是否有帮助。@john您需要在多行if语句周围加大括号。使用switch语句比使用长if/else链更简单,谢谢。
int readFile(const char fileName[])
{
    ifstream fin(fileName);
    //if error when opening file, it will return true
    if (fin.fail())
    {
        return true;
    }
    char madLib[256][256];
    int numWords = 0;

    while (fin >> madLib[numWords])
    {
        bool isSpace = true;
        bool noPrint = false;
        char* k = madLib[numWords];
        while (*k)
        {
            if (*k == ':')
            {
                k++;
                if (*k == '!')
                    cout << endl,
                    isSpace = false;
                else if (*k == '.')
                    cout << ".";
                else if (*k == ',')
                    cout << ", ";
                else if (*k == '<')
                    cout << "\"",
                    isSpace = false;
                else if (*k == '>')
                    cout << "\" ";
                else
                    displayArray(madLib, numWords),
                    noPrint = true;
            }
            else
            {
                if (noPrint == false)
                    cout << *k;
            }
            k++;
        }
        if (isSpace == true && isColon(madLib, numWords) == false)
            cout << " ";
        noPrint = false;
        numWords++;
    }
    fin.close();
    return 0;
}