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;
}