【发布时间】:2018-09-10 23:26:14
【问题描述】:
我的锻炼有问题。我有一个任务告诉我我必须修改一个函数 (skipWords()) 以便它不会返回指向所选单词中第一个字母的指针,它返回指向同一个单词中最后一个字母的指针。看起来除了 skipWords() 之外,我可能不会更改任何其他函数中的任何内容。
这是一个执行示例:
写一句话:问候你 您要打印哪个字? 1 o
我的代码:
#include<stdio.h>
#include<strings.h> // We include this library to manipulate text strings.
#include<ctype.h>
#define SIZE 100
int printFirstWord(char *pointer)
{
int i;
int length=strlen(pointer);
for(i=0; i<length; i++)
{
if(isalpha(pointer[i])!=0)
{
printf("%c",pointer[i]);
}
else if(isalpha(pointer[i])==0)
{
break;
}
}
return 0;
}
char *skipWords(char sentence[],int words)
{
int count=0,x,i;
int length=strlen(sentence);
char *pointer;
if(words==0)
{
pointer=&sentence[0];
}
else
{
for(i=0; i<length; i++)
{
if(isalpha(sentence[i])==0)
{
x=i+1;
count=count+1;
pointer=&sentence[x];
}
if(i==(length-1))
{
pointer=NULL;
break;
}
if(count==words)
{
break;
}
}
}
return pointer;
}
void printWord(char sentence[], int wordNumber)
{
char *pointer;
int length;
length=strlen(sentence);
int i;
pointer=skipWords(sentence,wordNumber);
if(pointer==NULL)
{
printf("This word doesn't exist");
return ;
}
printFirstWord(pointer);
}
int main()
{
char sentence[SIZE];
int length;
int words;
int check=1;
while(check==1)
{
printf("Write a sentence; ");
gets(sentence);
length=strlen(sentence);
printf("\nWhich word should be printed? ");
scanf(" %d",&words);
printWord(sentence, words);
printf("\n Do you want to enter a new sentence (press 1 to say yes)?");
scanf("%d",&check);
getchar();
}
return 0;
}
我的问题是我不确定我必须修改什么,我在下午的大部分时间里都尝试过,但我所有的尝试都失败了。
【问题讨论】:
-
skipWords 当前在哪里设置它返回的指针(即,它当前在哪里设置指向单词的第一个字母的指针)?
-
您尝试了下午的大部分时间,但所有尝试都失败了。请告诉我们上述尝试。
-
好的,我尝试了几次更改循环,看看是否可以指向句子的结尾,但不能再指向了。我花了下午的大部分时间完成这项任务,现在这是我必须做的最后一项任务。几乎是凌晨 2:00,我必须在早上 8:00 之前发送这个。我知道这不会很复杂,但我只是想知道该怎么做。
-
@AntónPomboAmarelle 考虑函数
skipWords中的情况。就像现在一样,您的主要if else语句围绕着论点int words。当words == 0时,代码会发生什么?这和你想要发生的事情是一样的吗?现在考虑words != 0。那里会发生什么?这是你想要发生的事情吗?如果它仍然没有点击,请检查代码并在每一行添加注释来描述它的作用。 -
我知道我的答案是修改循环的内容。例如,在单词 == 0 之后,指针指向句子的开头,但我不知道解决方案(到这第一点)是否是将 &sentence [0] 更改为 & sentence [length-1]。测试我已经验证如果在 words == 0 中,我更改为 &sentence [length-1] 然后当我被问到我想打印什么单词时,如果我说 0 最后一个单词的最后一个字母被打印出来,就像我要它。但是如果我说如果我输入 1 我会得到占据句子位置 1 的单词,这是我不想要的。
标签: c string function pointers printing