我已经尝试解决这个问题好几个小时了。包括研究,但不行。基本上,我们必须使用以下方法创建函数:
int reverseSentence(char** sentence, char ** newsentance, int maxWords){
它返回句子中的单词数。
这里有更多信息:
您必须保持句子大写,这意味着如果句子大写,则保留大写。如果单词大写,例如名称,则保留大写
- 参数 sentence 是对带有要反转的句子的字符数组的引用,不应由您的函数直接修改。每个单词都是句子中的一个数组条目。
- 参数 newsentance 是对保存新句子的字符数组的引用。
- 参数 maxWords 是字符数组的最大大小。
- 返回句子中的单词数
- 不要将字符串复制到临时存储并在句子中替换它们。移动指针。
例如:“存在还是不存在:这是个问题。” 变成“问题是那是:不是或是,到。
现在,我遇到的问题是,目前我的代码有效。但我似乎想不出一种方法来大写某些东西而不会出错。(因为我们不能做一个新的存储)。
我在这里拥有的基本上是我的代码的一部分:
char ** fptr = sentence; //front sentence
char ** lptr = sentence; //last sentence
char ** nptr = newsentance;//front of new sentance
if( isupper(**fptr)){ //if the first letter of the first word is capital set flag
capflag = 1;
}
// find last word before null sentence and also calculate size
while(**(++lptr))
++size;
--lptr;
if(capflag){
*nptr = *lptr;
**nptr = toupper(**lptr); //error here
}
另外,我不得不假设句子中的最后一个“单词”是“”,否则我找不到计算句子大小的方法。我希望有人可以帮助我。
我用它来测试:
char ** test = malloc(1000);
*test = "To ";
*(test+1) = "be ";
*(test+2) = "or ";
*(test+3) = "not ";
*(test+4) = "to ";
*(test+5) = "be ";
*(test+6) = "";
char ** ztest = malloc(1000);
int rs = reverseSentence(test, ztest, 1000 );