0

我希望在标点符号之前将 HTML 字符串标记插入到另一个字符串中。即给定“罗伯特:”,我想输出“罗伯特:”

目前我有(除了一个功能):

#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

我想您的程序中存在分段错误。看看你的代码片段:

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

您正在将 w 分配给为“罗伯特:”保留的内存中分配的空间,然后您正在使用它制作一个 strcat,这确实也是不正确的,因为您正在制作类似的东西:

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

这将引发分段错误。我建议你重新开始。再次编写程序并正确使用内存。

于 2012-09-21T05:45:23.073 回答
0

strchr() 一次只查找一个字符(并且您没有正确调用它),因此需要在循环中为 punct 中的每个字符调用。这是查找其中任何一个的功能。此外,您没有正确使用 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 回答