【题目描述】
输入一个仅包含小写字母、大写字母和空格的字符串,一段只包含小写字母和大写字母的字符串为一个单词,其中每个单词用空格隔开。要求编写一段程序,将所有单词保存到一个字符指针数组中,重复的单词只保存一个,并输出拆分的单词。
【输入说明】
字符串长度小于200。单次总数不多于100,每个单词长度小于20。
【输出说明】
按输入时从左到右单词出现的顺序进行输出。每个单词独立一行。
【输入样例】
good luck
【输出样例】
good
luck
void main()
{
char x[200];
gets (x);
char *y[200];
int i=0,n;
y[0]=strtok(x," ");
while (y[i])
{
i++;
y[i]=strtok(NULL," ");
}
n=i;
for (i=0;i<n;i++)
printf ("%s\n",y[i]);
}
题里说重复单词去重,这个函数可以做到吗?该怎么做?
这个函数是不能做到的,需要和之前的比较字符串才能判决,鉴于你的豆豆都被我一会儿搞走了,给你个参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char x[200];
char *token;
char *tokens[100]; //最多100个单词
gets(x);
int counter = 0;
token = strtok(x, " ");
//先存储打印第一个,因为第一个不可能有重复
tokens[counter] = token;
puts(token);
counter++;
while (1)
{
// 获取下一个字符串,如果空说明没了,该跳出了
token = strtok(NULL, " ");
if (token == NULL)
{
break;
}
// 判断之前有没有
unsigned char hascontained = 0;
for (int i = 0; i < counter; i++)
{
if ( strcmp(tokens[i],token) == 0)
{
hascontained = 1;
break;
}
}
//如果有,就不加入保存列表,直接下一步循环
if(hascontained)
continue;
//如果是新单词,加入保存列表,打印继续
tokens[counter] = token;
counter++;
puts(token);
}
system("pause");
return 0;
}
对于C语言这个东西,很多东西需要自己写的,如果库函数没有,就得自己写。