【发布时间】: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()通过在输入字符串上添加空字节来破坏其输入。 -
如果在开始标记行之前输入数字,则不必将单词保留在数组中 - 只需调用
strtokn 次,然后输出它返回的字符串。这会使程序很短,大约 10..15 行。 -
请发布一个带有解释的答案。