Description
给出一个完整的句子,这个句子中不包含不可见字符或者空格,于是在这个句子中有许多不同的单词。一个单词是指一串连续的最长的英文字母(大写或小写)。例如”#abc#”中,”abc”就是一个单词,而”ab”,”bc”都不算单词。
Input
输入包含多组数据 输入数据第一行是一个句子,只包含可见字符(不包含空格)。句子长度不超过 100。
Output
按单词出现的顺序输出不同的单词。如果一个单词出现多次则只有第一次出现时输出。
Sample Input
Orz_YaYaMao_Orz_Daxia_Orz_EveryOne
Sample Output
Orz
YaYaMao
Daxia
EveryOne
明明是一道水题,用数组就可以很轻松解决的,我偏偏写了个链表,结果把自己写晕了。(刚学完就忘了,没记住-。-)还好最终还是写好了,要不真尼玛丢人。下面给出我写的链表代码(有错误请指出,我自己有点蒙逼)
思路:读取字符,遇到符号将之前读入的字符串储存在链表里,(写个二位数组也可以)最后输出
#include<iostream>
#include<cstring>
using namespace std;
class Node{
public:
string str;
Node *next;
Node(string ss){
str = ss;
next = NULL;
}
};
class linklist{
public:
Node *head;
int length;
linklist(){
head = NULL;
length = 0;
}
void insert(Node *node, int index) {
if (head == NULL) {
head = node;
return;
}
if (index == 0) {
node->next = head;
head = node;
return;
}
Node *current_node = head;
int count = 0;
while (current_node->next != NULL && count < index - 1) {
current_node = current_node->next;
count++;
}
if (count == index - 1) {
node->next = current_node->next;
current_node->next = node;
length++;
}
}
int search(Node *node){
if(head == NULL){
return 0;
}
Node *current_node = head;
while(current_node!=NULL){
if(current_node -> str == node -> str){
return 1;
}
else{
current_node = current_node ->next;
}
}
return -1;
}
void output(){
Node* current_node = head;
while(current_node !=NULL){
cout<<current_node -> str<<endl;
current_node = current_node -> next;
}
}
};
int main(){
char str[100];
//linklist list();
//int t;
//cin>>t;
while(cin>>str){
// cin>>str;
int strNum = 0,_str = 0;
for(int i = 0; i< strlen(str); i++){
if(isalpha(str[i])){
strNum++;
}
if(!isalpha(str[i])){
_str++;
}
}
//cout<<strlen(str)<<" "<<strNum<<endl;
if(strNum == strlen(str)){
cout<<str<<endl;
}
else{
linklist list;
int count = 0;
char temp[105];
memset(temp,'\0',sizeof(temp));
int j = 0;
for(int i =0; i<strlen(str); i++){
if(isalpha(str[i])){
temp[j] = str[i];
j++;
}
if(isalpha(str[i]) && !isalpha(str[i+1])){
//cout<<temp<<endl;
string ss = temp;
//cout<<ss<<endl;
Node * node = new Node(ss);
if(list.search(node)<=0){
list.insert(node,count);
count++;
}
memset(temp,'\0',sizeof(temp));
j = 0;
}
}
list.output();
}
}
}