【问题标题】:Modify a function to return a pointer to the last letter in a word from a string修改函数以从字符串返回指向单词中最后一个字母的指针
【发布时间】: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


【解决方案1】:

你的句子中不允许有数字,因为 isalpha 只检查字母。

我更改了一些变量名称并使用了固定的句子和单词,但这并没有改变程序。

我所做的(我认为)只是更改了 printFirstWord fkt。

在此处查看代码: http://coliru.stacked-crooked.com/a/df75d62b5aa338f3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多