【发布时间】:2012-10-08 06:23:48
【问题描述】:
我已经尝试解决这个问题好几个小时了。包括研究,但不行。基本上,我们必须创建函数:
int reverseSentence(char** sentence, char ** newsentance, int maxWords){
它返回句子中的单词数。
这里有更多信息:
您必须保持句子大写,这意味着如果句子是大写的,请保持 首都。如果单词是大写的,比如名字,保留大写
- 参数句是对一个字符数组的引用,其中的句为 reverse 并且不应由您的函数直接修改。每个单词都是一个数组 在句子中输入。
- 参数newsentance是对一个字符数组的引用,用来保存新的 句子。
- 参数maxWords是字符数组的最大大小。
- 返回句子中的单词数
- 不要将字符串复制到临时存储并在句子中替换它们。移动 指针。
ex:“成为,还是不成为:这是个问题。”变成“问题是那是:不是或是,到。
现在,我遇到的问题是,目前我的代码有效。但我似乎想不出一种方法来大写某些东西而不会出错。 (因为我们不能做一个新的存储)。
我在这里拥有的基本上是我的代码的一部分:
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 );
【问题讨论】:
-
你能指定你想提供给这个函数的确切输入吗?
-
在我看来这应该可以工作 - 正如 maxim 建议的那样,也许可以在您设置句子缓冲区并调用函数的位置发布代码。
-
我添加了我用来测试的代码:@MaximSkurydin
-
你确定反句大写正确吗?当你被告知不要管这些词时,你似乎已经大写了“问题”而没有大写了“到”?说明没有说明您如何在
sentence参数中检测句子的结尾。空指针标记句子的结尾是一个适度合理的猜测,但这是一个猜测。看来您不必分配内存。它已经分配给你了。 -
问题是这段代码在运行时失败。如果我删除 if(capflag) 它将是不是或是
标签: c pointers multidimensional-array char