2012-09-21 55 views
0

我正在寻找在标点符号前插入HTML字符串标签到另一个字符串中。 即鉴于“罗伯特:”我想输出“罗伯特:”在标点符号之前插入字符串c

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

#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); 
} 

任何帮助将不胜感激。

+0

您的代码会在很多方面中断。调试并纠正它们。 – Abhineet

+0

您需要的帮助是阅读C语言教程,采取Ç班等,因为你正在写是不是C. –

+1

这个程序甚至不会编译,当它它很可能会崩溃。我们和其他问题可能会帮助你,但请先阅读http://sscce.org/。 –

回答

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")); 
} 
0

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

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

您分配w至为保留的内存分配空间“罗伯特:”然后你正在与它的strcat,确实也是不正确的,因为你是做类似:

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

这将引发分割故障。我建议你重新开始新鲜。再次编写程序并正确使用您的内存。