【问题标题】:output the right word输出正确的词
【发布时间】:2017-01-02 13:27:31
【问题描述】:

我需要输出一个单词,我输入了一个数字。我不知道应该如何为一个单词分配一个数字。这是我使用 func strtok() 来打破我的句子,然后我迷路了.. 例如:“hhh jjjj kkkkk llllll”我输入了3 它输出:kkkkk

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char str[80],*p;
    char sp[20]=" ";
    int i,n=0,num;
    printf("Enter your line: ");
    gets(str);
    p=strtok(str,sp);
    while (p!=NULL){
        for(i=0;i<p;i++){
            printf("%s - [%d]\n",p,i+1);
            p=strtok(NULL,sp);
            n=p;
        }
        n++;
    }
    printf("n: ");
    scanf("%d",&num);
    if(num==n){
        printf("%s",p);
    }

    return 0;
}

【问题讨论】:

  • 永远不要使用gets()。太危险了。
  • 创建一个单词数组,即char[]数组,每一项都会包含一个单词。并注意索引,数组是从 0 开始的,在人的心目中更可能是从 1 开始的。
  • 双循环充其量是可疑的;我认为它是错误的。您似乎没有指向单词的数组,这使得通过数字访问单词变得困难。请记住,strtok() 通过在输入字符串上添加空字节来破坏其输入。
  • 如果在开始标记行之前输入数字,则不必将单词保留在数组中 - 只需调用 strtok n 次,然后输出它返回的字符串。这会使程序很短,大约 10..15 行。
  • 请发布一个带有解释的答案。

标签: c string words


【解决方案1】:

1) 不应使用gets。这就是为什么这里是fgets(str, sizeof str, stdin);

2) 我输入了一个单词的数字之前我开始标记该行

3) 主要算法在这个:

while (p != NULL && n < num){ if(++n == num){ printf("%s\n", p); break; } p=strtok(NULL, sp); }

在我的循环中,当它找到单词时,当用户输入一个数字并且如果它与 num 相等时,n 会上升,因此它会跳出循环并打印它。

#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(void){
        char str[80], *p;
        const char *sp = " \n";
        int n = 0, num = 0;

        printf("Enter your line: ");
        fgets(str, sizeof str, stdin);
        printf("n: ");
        scanf("%d", &num);

        p = strtok(str, sp);
        while (p != NULL && n < num){
            if(++n == num){
                printf("%s\n", p);
                break;
            }
            p=strtok(NULL, sp);
        }

        return 0;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多