2017-02-21 16 views
-1
if(notfound == 1) 
{ 
    int len = strlen(word); 
    //if(strcmp(word, array)== 0) 
    if(strcmp(array3,word)==0) 
    { 
     word[len - 1] = '\0'; 
    } 
    if(strcmp(word, array2) ==0) 
    { 
     word[len - 1] = '\0'; 
    } 

    fprintf(NewFile,"%s\n", word); 
} 

Это мой код программы проверки орфографии, по крайней мере, часть, которая приносит большую часть моих проблем. Моя программа прекрасно проверяет любой текстовый файл, сравнивая его с Dicitonary. Слово в этом коде остается для массива, содержащего неправильные слова из текстового файла. Array 3 - массив слов, который включает в себя знаки препинания и выглядит так: char* array3[] = {"a.", "b.", "c.", "d.", "e.", "f.", "g.", "h."}; Я пытаюсь сравнить слова с этим массивом, чтобы избавиться от пунктуации (в этом случае точки, но позже я планировал остаток пунктуации, чтобы позаботиться). Проблема в том, что если мой массив будет выглядеть как «.», «,», «!», «?», «;», Strcmp просто пропускает его и не освобождается от пунктуации. И я знаю, что мой метод очень прост и не совсем правилен, но когда я пытался его использовать с «c», он работал. Кроме того, я очень новый для языка CКак избавиться от пунктуации в программе проверки орфографии?

Если ayone может помочь, я был бы очень признателен, что, согом я действительно застрял с этой проблемой в течение недель

+1

Пожалуйста, начните отступать от кода. –

+1

И не называйте ваши переменные 'array3', а скорее некоторым значимым именем, таким как' punctuations'. –

+2

Слишком мало кода, поэтому нам не удастся выяснить, что здесь может быть неправильным. Но 'strcmp (array3, word)' выглядит подозрительно. Включите предупреждения компилятора и обработайте предупреждения как ошибки. –

ответ

0

Если 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)] = '\0'; 
    printf ("%s\n", word); 

    strcpy (word, "comma,"); 
    printf ("%s\n", word); 
    word[strcspn (word, punctuation)] = '\0'; 
    printf ("%s\n", word); 

    strcpy (word, "period."); 
    printf ("%s\n", word); 
    word[strcspn (word, punctuation)] = '\0'; 
    printf ("%s\n", word); 

    strcpy (word, "exclamation!"); 
    printf ("%s\n", word); 
    word[strcspn (word, punctuation)] = '\0'; 
    printf ("%s\n", word); 

    strcpy (word, "question?"); 
    printf ("%s\n", word); 
    word[strcspn (word, punctuation)] = '\0'; 
    printf ("%s\n", word); 

    strcpy (word, "semicolon;"); 
    printf ("%s\n", word); 
    word[strcspn (word, punctuation)] = '\0'; 
    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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^