假设我有一个char数组,其中包含重复的单词,我将删除它而不使用字符串库而只使用 cstring库。
*****示例文本******
短篇小说类型中最着名的作品中的一个是必读的。这个故事是关于一对年轻夫妇以及当他们没有足够的钱钱时他们如何迎接购买圣诞礼物的挑战。
*****编辑文字******
短篇小说类型中最着名的一个是必读的。这个故事是关于一对年轻夫妇以及当他们没有足够的金钱时,他们如何应对购买圣诞礼物的挑战。
我已将文本存储到char数组中并将文本转换为大写字母。
char str[100];
但我怎样才能得到这个词并逐一比较呢?其中一些甚至包含标点符号。就像“钱钱”。它也是重复的。
答案 0 :(得分:2)
我认为你不能使用分隔符功能,因为你想保留空格和标点符号。我有一个解决你的问题的方法,我想你可以从代码中得到一个想法。
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_ITEM_LENGTH 20
#define MAX_ITEM_COUNT 200
#define MAX_STRING_LENGTH 1000
char delimeters[] = {' ', ',', '.', '-'};
bool equals(char* str1, char* str2, int length1, int length2){
if(length1 != length2)
return false;
for(int i = 0; i < length1; i++)
if(toupper(str1[i]) == toupper(str2[i]))
return true;
return false;
}
int parse(char* str, char*** result){
int index = 0;
int totalCount = 0;
for(; totalCount < MAX_ITEM_COUNT && str[index] != '\0' ; totalCount++){
for (int resultIndex = 0 ; resultIndex < MAX_ITEM_LENGTH; resultIndex++){
if (resultIndex > 0 && strchr(delimeters,str[index])){
break;
}
(*result)[totalCount][resultIndex] = str[index];
index++;
if(strchr(delimeters, str[index-1]))
break;
}
}
return totalCount;
}
int removeDuplicates(char** items, int itemsLength, char*** result){
char* lastItem = new char[MAX_ITEM_LENGTH];
int index = 0;
for(int i = 0 ; i < itemsLength ; i++){
if(equals(items[i], lastItem, strlen(items[i]), strlen(lastItem))){
index--;
continue;
}
strcpy((*result)[index++], items[i]);
if(!strchr(delimeters, items[i][0])){
strcpy(lastItem, items[i]);
}
}
return index;
}
int main() {
char str[MAX_STRING_LENGTH] = "One one one of the most famous titles in the short story genre is a must-read. The story is about a young couple and how they meet the challenge of buying each other a Christmas gifts when they don't have enough money money money.";
char** items;
char** result;
items = new char*[MAX_ITEM_COUNT];
result = new char*[MAX_ITEM_COUNT];
for(int i = 0; i < MAX_ITEM_COUNT; i++){
items[i] = new char[MAX_ITEM_LENGTH];
result[i] = new char[MAX_ITEM_LENGTH];
}
int itemsLength = parse(str, &items);
int resultLength = removeDuplicates(items, itemsLength, &result);
for(int i = 0; i < resultLength; i++)
cout<<result[i];
return 0;
}