0

句読点の前にHTML文字列タグを別の文字列に挿入しようとしています。つまり、「Robert:」が与えられた場合、「 Robert:」を出力したいと思います。

現在私は(関数の一部として)持っています:

#define fhighlight     "<font_color="red"><b>"
#define bhighlight     "</b></font>"
#define punct          ".,;:!?"
#define wordlen        15
char w[wordlen];
w = "Robert:";
w = strcat(fhighlight,w);
if ((strchr(punct,w)==1) { /*check for punctuation in w*/
   /*not quite sure what to put here*/
} else {
  w = strcat(w,bhighlight);
}

どんな助けでも大歓迎です。

4

2 に答える 2

0

strchr()は一度に1つの文字のみを検索するため(正しく呼び出されていないため)、punct内の各文字に対してループで呼び出す必要があります。これらのいずれかを探すための1つの関数を次に示します。また、strcat()を正しく使用していません。

#include <string.h>
#include <stdio.h>

int char_position(const char *string,const char *chars)
{
   int length = strlen(string);
   while (*chars)
   {
      for (int i = 0; i < length; i++)
      {
         if ( string[i] == *chars )
         {
            return i;
         }
      }
      chars++;
   }
   return -1;
}

const char *highlight(const char *word)
{
#define fhighlight     "<font_color=\"red\"><b>"
#define bhighlight     "</b></font>"
#define punct          ".,;:!?"
#define wordlen        1500
   static char w[wordlen];  
   strcpy(w,fhighlight);
   int position = char_position(word,punct);
   if ( position != -1 )
   {
      strncat(w,word,position);
      strcat(w,bhighlight);
      strcat(w,&word[position]);
   } else {
      strcat(w,word);     
      strcat(w,bhighlight);
   }
   return w;
}


int main(void)
{
   printf("%s\n",highlight("Robert:"));
   printf("%s\n",highlight("Roberta"));
   printf("%s\n",highlight("LaDonna! is coming"));
}
于 2012-09-21T06:39:49.623 に答える
0

プログラムにセグメンテーション違反が発生していると思います。コードのこのフラグメントを見てください。

char w[wordlen];
w = "Robert:";
w = strcat(fhighlight,w);

「Robert:」用に予約されたメモリ内の割り当てられたスペースにwを割り当て、それを使用してstrcatを作成していますが、次のようなものを作成しているため、これも正しくありません。

w = strcat("<font_color="red"><b>",w);

これにより、セグメンテーション違反が発生します。新しくやり直すことをお勧めします。プログラムを書き直して、メモリを適切に使用してください。

于 2012-09-21T05:45:23.073 に答える