我有一串单词,它们之间有单词分隔符,在另一个字符串中,我想将主字符串中的单词一个一个地放,将单词与其他字符串进行比较,然后将其放入一个字符串数组中。
所以基本上我有 1)一组单词,以及 2)一串字 的形式(单词-单词-单词...),我需要做的就是检查这些单词之一是否在单词数组中。如果是,则将其删除。 我将通过定义一个新的'char'类型变量,遍历我的主要句子,并且只要还没有到达单词分隔符,就将该单词添加到新字符串中。使用另一个函数,我检查该单字字符串是否存在于数组中。如果没有,我将单词添加到临时数组中,然后释放字符串并重复直到句子结尾。但我似乎做得不好(我刚刚开始研究字符,字符数组等主题)
void delete_words(char *words[],int n, char *sentence ){
int m=strlen(sentence);
char tmp[m];
char * str=(char*)malloc(sizeof(char)*(MAX_LEN));
int i=0,end=0,k,z;
for(k=0; k<m; k++)
{
z=0;
while(*sentence && sentence[i]!= WORD_SEPERATOR)
{
str[z]=sentence[i];
i++;
z++;
}
if(is_string_in_array(words,n,str)==false)
{
int len=strlen(str);
strcpy(tmp+k,str);
end=end+len;
tmp[end]=WORD_SEPERATOR;
free(str);
}}
我确实意识到这是完全错误的,并且我可以找到一些错误,但是我不知道如何解决它,因为正如我所说,这是我关于该主题的第一份作业。真的很感谢您的帮助!
答案 0 :(得分:1)
select_next_word
将遍历字符串并尝试逐个提取单词,然后针对数组进行检查,如果不存在,则将其添加到目标字符串中
#include <stdio.h>
#include <String.h>
void select_next_word(char **buffer, char **next_word)
{
*next_word = *buffer;
while(**buffer != 0)
{
if(**buffer == '-')
{
**buffer = 0;
(*buffer)++;
break;
}
(*buffer)++;
}
}
int main()
{
#define CHECK_ARR_SIZE 2
char check_arr[CHECK_ARR_SIZE][32] = {"this", "test"}; //make second dim large enough
char test[] = "this-is-a-test-string";
char dest[32]; //be sure it is large enough
char *next_word;
char *temp = test;
while(1)
{
select_next_word(&temp, &next_word);
int i = 0;
int word_found = 0;
for( ; i < CHECK_ARR_SIZE ;i++)
{
if(strcmp(next_word, check_arr[i]) == 0)
{
word_found = 1;
break;
}
}
if(!word_found)
strcat(dest, next_word);
if(*temp == 0)
break;
}
printf(dest);
}