如何摆脱 c 拼写检查程序中的标点符号?
How to get rid off of the punctuation in c spellchecking program?
if(notfound == 1)
{
int len = strlen(word);
//if(strcmp(word, array)== 0)
if(strcmp(array3,word)==0)
{
word[len - 1] = '[=10=]';
}
if(strcmp(word, array2) ==0)
{
word[len - 1] = '[=10=]';
}
fprintf(NewFile,"%s\n", word);
}
这是我的拼写检查程序代码,至少是给我带来大部分问题的部分。我的程序通过与 Dicitonary 进行比较,可以很好地检查任何文本文件的拼写。此代码中的单词保留为包含文本文件中错误单词的数组。数组 3 是包含标点符号的单词数组,如下所示: char* array3[] = {"a.", "b.", "c.", "d.", "e.", "f.", "g.", "h."};
我尝试将单词与该数组进行比较以去除标点符号(在本例中为点,但后来我计划使用其余的标点符号照顾)。问题是,如果我的数组看起来像“.”、“,”、“!”、“?”、“;”,strcmp 只是跳过它,并没有去掉标点符号。而且我知道我的方法非常简单而且不太合适,但是当我用 "c." 尝试它时,它起作用了。加上我对c语言很陌生
如果有人能提供帮助,我将不胜感激,因为我已经被这个问题困了一个星期了
如果 word
数组可能有一个尾随标点符号,可以使用 strcspn
.
删除该字符
如果 word
数组在数组中有多个标点符号,可以在循环中使用 strpbrk
替换这些字符。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word[100] = "";
char punctuation[] = ",.!?;";
char *temp = NULL;
strcpy ( word, "text");//no punctuation
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "comma,");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "period.");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "exclamation!");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "question?");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "semicolon;");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
temp = word;
strcpy ( word, "comma, period. exclamation! question? semicolon;");
printf ( "%s\n", word);
while ( ( temp = strpbrk ( temp, punctuation))) {//loop while punctuation is found
*temp = ' ';//replace punctuation with space
}
printf ( "%s\n", word);
return(0);
}
if(notfound == 1)
{
int len = strlen(word);
//if(strcmp(word, array)== 0)
if(strcmp(array3,word)==0)
{
word[len - 1] = '[=10=]';
}
if(strcmp(word, array2) ==0)
{
word[len - 1] = '[=10=]';
}
fprintf(NewFile,"%s\n", word);
}
这是我的拼写检查程序代码,至少是给我带来大部分问题的部分。我的程序通过与 Dicitonary 进行比较,可以很好地检查任何文本文件的拼写。此代码中的单词保留为包含文本文件中错误单词的数组。数组 3 是包含标点符号的单词数组,如下所示: char* array3[] = {"a.", "b.", "c.", "d.", "e.", "f.", "g.", "h."};
我尝试将单词与该数组进行比较以去除标点符号(在本例中为点,但后来我计划使用其余的标点符号照顾)。问题是,如果我的数组看起来像“.”、“,”、“!”、“?”、“;”,strcmp 只是跳过它,并没有去掉标点符号。而且我知道我的方法非常简单而且不太合适,但是当我用 "c." 尝试它时,它起作用了。加上我对c语言很陌生
如果有人能提供帮助,我将不胜感激,因为我已经被这个问题困了一个星期了
如果 word
数组可能有一个尾随标点符号,可以使用 strcspn
.
删除该字符
如果 word
数组在数组中有多个标点符号,可以在循环中使用 strpbrk
替换这些字符。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word[100] = "";
char punctuation[] = ",.!?;";
char *temp = NULL;
strcpy ( word, "text");//no punctuation
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "comma,");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "period.");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "exclamation!");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "question?");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
strcpy ( word, "semicolon;");
printf ( "%s\n", word);
word[strcspn ( word, punctuation)] = '[=10=]';
printf ( "%s\n", word);
temp = word;
strcpy ( word, "comma, period. exclamation! question? semicolon;");
printf ( "%s\n", word);
while ( ( temp = strpbrk ( temp, punctuation))) {//loop while punctuation is found
*temp = ' ';//replace punctuation with space
}
printf ( "%s\n", word);
return(0);
}