我一直在试图解决这个问题数小时。包括研究,但没有去。基本上,我们必须以创建功能:C指针,指针,字符
int reverseSentence(char** sentence, char ** newsentance, int maxWords){
当它返回一个句子中的单词数。
下面是详细信息:
你必须保持句子的资本,这意味着如果句子是资本,保持 资本。如果一个字是大写,如名称,保留资本
- 参数句话是一个字符数组与句子的引用, 相反,不应该由你的函数直接进行修改。句子中的每个单词都是数组 条目。
- 参数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);
你能指定你想喂给这个函数的确切输入吗? –
对我来说,这似乎应该起作用 - 正如格言所示,可能会在设置语句缓冲区并调用函数的地方发布代码。 – Elemental
我添加了以前用于测试的代码:@MaximSkurydin – Kalon