从0开始<二>:1

程序一:编写一个程序,以每行一个单词的形式打印其输出

解法一:设置标志,

#include <stdio.h>

int main(void)
{
	int c,flag;
	flag = 0;
	while ( (c=getchar()) != EOF)
	{
		if (c==' ' || c=='\t' || c=='\n')
		{
			if (flag == 0)
			{
				flag = 1;
				putchar('\n');
			}
		}
		else 
		{
			flag = 0;
			putchar(c);
		}
	}
	
	return 0;
}

程序二:该程序读入一组文本,并把最长的文本行打印出来。

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* 打印输出最长行 */
int main(void)
{
    int len;
    int max;

    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while ( (len=getline(line,MAXLINE)) > 0)
    {
        if (len > max)
        {
            max = len;
            copy(longest,line);
        }
    }
    if (max > 0)
        printf("%s",longest);

    return 0;
}

/*将一行读入到s中并返回其长度*/
int getline(char s[], int lim)
{
    int c,i;

    for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i)
        s[i] = c;
    //保存'\n'的
    if (c == '\n')
    {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';

    return i;
}

void copy(char to[], char from[])
{
    int i;
    i = 0;

    while ( (to[i] = from[i]) != '\0') //将'\0'也给拷贝了
        ++i;
}
程序三:编写一个程序,打印长度大于80个字符的所有输入行

解法:仔细看看别人的思路

#include <stdio.h>
#define MINLENGTH 81

int readbuf(char *buf);  //读取字符到buf中,并记录状态 
int copyline(char *buf);   //打印输出 

int main(void)
{
	char buffer[MINLENGTH];
    int status = 0;
    while (status != -1) 
	{
        status = readbuf(buffer);
        if (status == 1)
            status = copyline(buffer);
    }
    return 0;
}

int readbuf(char *buf)  
{
	int i,c;
	i = 0;
	while (i < MINLENGTH)
	{
		c = getchar();
		if (c == EOF) return -1;
		if (c == '\n') return 0;
		buf[i++] = c;
	}	
	return 1;
}

int copyline(char *buf) 
{
	int i;
    int c;
    int status = 1;
    for(i=0; i<MINLENGTH; i++)
        putchar(buf[i]);
    while(status == 1)
	{
        c = getchar();
        if (c == EOF)
            status = -1;
        else if (c == '\n')
            status = 0;
        else
            putchar(c);
    }  
    putchar('\n');
    return status;
}

程序四:编写函数reverse(s),将字符串s中的字符顺序颠倒过来,使用该函数编写一个程序,每次颠倒一个输入行中的字符

#include <stdio.h>
#include <string.h>
#define MAXLINE 1024

int getline(char *buf, int lim);   // lim是一行限制最大长度 
void reverse(char *buf);
void swap(char *a, char *b);

int main(void)
{
	char buf[MAXLINE];
	int len;
	
	while ( (len=getline(buf,MAXLINE)) > 0)
	{
		buf[len-1] = '\0';
		reverse(buf);
		printf("%s\n",buf);	
	}
	 
	return 0;
}

int getline(char s[], int lim)
{
    int c,i;

    for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i)
        s[i] = c;
    //保存'\n'的
    if (c == '\n')
    {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';

    return i;
}

void swap(char *a, char *b)
{
	char tmp = *a;
	*a = *b;
	*b = tmp;
}

void reverse(char *buf)
{
	int i,j;
	j = strlen(buf) - 1;
	for (i=0; i<j; ++i,--j)
		swap(&buf[i],&buf[j]);
}



生成的结果如下: '<table border="1"> <tr><th>更新时间</th><th>主题</th><th>日志内容</th></tr> <tr><td>@ 15:18:23</td><td></td><td>下午收盘!倒计时退出</td></tr> <tr><td>一@ 15:18:08</td><td></td><td>下午收盘!倒计时退出</td></tr> <tr><td>@ 15:17:34</td><td>主力</td><td>无需核对主力</td></tr> <tr><td>@ 15:17:33</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%xaf">当前运行6.01版Beta(obvHour05)</a>'</td></tr> <tr><td>@ 15:17:32</td><td>最新仓位</td><td>品种: AG2602 & 手数:19 & 方向:1 & 保证金标准:0.16 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 15:17:30</td><td>Input: SC</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-27 09:11 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 15:17:28</td><td>Input: P</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.08 & 生效时间:2025-11-27 09:10 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 15:17:26</td><td>Input: AU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.16 & 生效时间:2025-11-27 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 15:17:24</td><td>Input: LC</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-27 09:09 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>一@ 15:17:23</td><td>主力</td><td>无需核对主力</td></tr> <tr><td>一@ 15:17:22</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%af">当前运行4.06版(S30)</a>'</td></tr> <tr><td>@ 15:17:21</td><td>Input: AG</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.16 & 生效时间:2025-11-27 09:09 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>一@ 15:17:20</td><td>Input: JM</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>@ 15:17:19</td><td>Input: JM</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-27 09:08 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>一@ 15:17:18</td><td>Input: LC</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>@ 15:17:17</td><td>Input: RU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.09 & 生效时间:2025-11-17 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>一@ 15:17:16</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-26 08:54</td></tr> <tr><td>@ 15:17:14</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-10 09:19 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>一@ 15:17:13</td><td>实盘权益初始化:</td><td>1023501.86</td></tr> <tr><td>@ 15:17:11</td><td>实盘权益初始化:</td><td>5929235.97</td></tr> <tr><td>一@ 15:17:05</td><td>单边最多开仓次数:</td><td>3</td></tr> <tr><td>@ 15:17:04</td><td>应用周期:</td><td>60M</td></tr> <tr><td>@ 15:00:03</td><td></td><td>下午收盘!倒计时退出</td></tr> <tr><td>一@ 15:00:01</td><td></td><td>下午收盘!倒计时退出</td></tr> <tr><td>一@ 14:58:04</td><td>checkcloseday_SQL</td><td>初始化-checkcloseday表</td></tr> <tr><td>一@ 14:58:02</td><td>check</td><td>已日盘收盘平仓</td></tr> <tr><td>一@ 14:58:02</td><td></td><td>收盘平仓-格式化zhuli表</td></tr> <tr><td>一@ 14:07:16</td><td>实盘1:LC2605</td><td>开盘建仓-空</td></tr> <tr><td>一@ 13:51:54</td><td>实盘1:LC2605</td><td>空头上破均线+atr*0.3平仓</td></tr> <tr><td>一@ 13:02:07</td><td>主力</td><td>无需核对主力</td></tr> <tr><td>一@ 13:02:06</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%af">当前运行4.06版(S30)</a>'</td></tr> <tr><td>一@ 13:02:04</td><td>Input: JM</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>一@ 13:02:01</td><td>Input: LC</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>一@ 13:01:59</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-26 08:54</td></tr> <tr><td>一@ 13:01:56</td><td>实盘权益初始化:</td><td>1058111.38</td></tr> <tr><td>一@ 13:01:53</td><td>单边最多开仓次数:</td><td>3</td></tr> <tr><td>@ 12:57:13</td><td></td><td>中午休市,距离开盘时间: 167.353</td></tr> <tr><td>@ 12:56:35</td><td>主力</td><td>无需核对主力</td></tr> <tr><td>@ 12:56:34</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%xaf">当前运行6.01版Beta(obvHour05)</a>'</td></tr> <tr><td>@ 12:56:33</td><td>最新仓位</td><td>品种: AG2602 & 手数:19 & 方向:1 & 保证金标准:0.16 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 12:56:31</td><td>Input: SC</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-27 09:11 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 12:56:29</td><td>Input: P</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.08 & 生效时间:2025-11-27 09:10 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 12:56:27</td><td>Input: AU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.16 & 生效时间:2025-11-27 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 12:56:25</td><td>Input: LC</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-27 09:09 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 12:56:23</td><td>Input: AG</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.16 & 生效时间:2025-11-27 09:09 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 12:56:20</td><td>Input: JM</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-27 09:08 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 12:56:18</td><td>Input: RU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.09 & 生效时间:2025-11-17 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 12:56:15</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-10 09:19 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 12:56:12</td><td>实盘权益初始化:</td><td>5884775.97</td></tr> <tr><td>@ 12:56:10</td><td>应用周期:</td><td>60M</td></tr> <tr><td>@ 11:30:05</td><td></td><td>中午休市,距离开盘时间: 7194.9491</td></tr> <tr><td>一@ 11:30:02</td><td></td><td>中午休市,距离开盘时间: 7198.5908</td></tr> <tr><td>一@ 09:37:25</td><td>实盘1-股指:IM2512</td><td>开盘建仓-多</td></tr> <tr><td>@ 09:30:06</td><td>实盘2:AG2602</td><td>开仓-多 & obv 多头排列 & 突破K_20</td></tr> <tr><td>@ 09:19:00</td><td>主力</td><td>无需核对主力</td></tr> <tr><td>@ 09:18:59</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%xaf">当前运行6.01版Beta(obvHour05)</a>'</td></tr> <tr><td>@ 09:18:58</td><td>最新持仓</td><td>当前无持仓</td></tr> <tr><td>@ 09:18:57</td><td>Input: SC</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-27 09:11 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 09:18:54</td><td>Input: P</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.08 & 生效时间:2025-11-27 09:10 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 09:18:52</td><td>Input: AU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.16 & 生效时间:2025-11-27 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 09:18:50</td><td>Input: LC</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-27 09:09 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 09:18:48</td><td>Input: AG</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.16 & 生效时间:2025-11-27 09:09 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 09:18:45</td><td>Input: JM</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-27 09:08 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 09:18:43</td><td>Input: RU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.09 & 生效时间:2025-11-17 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 09:18:41</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-10 09:19 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 09:18:37</td><td>实盘权益初始化:</td><td>5893241.84(新入模拟金500万)</td></tr> <tr><td>@ 09:18:36</td><td>应用周期:</td><td>60M</td></tr> <tr><td>@ 09:12:08</td><td>盘中新增品种: SC</td><td>仓位:0.1 & 方向:-1 & 保证金比例:0.11</td></tr> <tr><td>@ 09:12:05</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:11:51</td><td>剔除品种: SN</td><td>清理或平仓</td></tr> <tr><td>@ 09:11:49</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:10:44</td><td>盘中新增品种: P</td><td>仓位:0.1 & 方向:1 & 保证金比例:0.08</td></tr> <tr><td>@ 09:10:41</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:10:17</td><td>盘中新增品种: AU</td><td>仓位:0.1 & 方向:1 & 保证金比例:0.16</td></tr> <tr><td>@ 09:10:14</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:10:05</td><td>剔除品种: IF</td><td>清理或平仓</td></tr> <tr><td>@ 09:10:03</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:09:53</td><td>盘中新增品种: LC</td><td>仓位:0.1 & 方向:-1 & 保证金比例:0.11</td></tr> <tr><td>@ 09:09:50</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:09:40</td><td>剔除品种: BR</td><td>清理或平仓</td></tr> <tr><td>@ 09:09:37</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:09:22</td><td>盘中新增品种: AG</td><td>仓位:0.1 & 方向:1 & 保证金比例:0.16</td></tr> <tr><td>@ 09:09:19</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>一@ 09:09:17</td><td>实盘1:LC2605</td><td>开盘建仓-空</td></tr> <tr><td>@ 09:09:08</td><td>剔除品种: C</td><td>清理或平仓</td></tr> <tr><td>@ 09:09:05</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:09:03</td><td></td><td>日盘2 wrong:输入必须是 1×1 的元胞数组。</td></tr> <tr><td>@ 09:08:59</td><td>剔除品种: NI</td><td>清理或平仓</td></tr> <tr><td>@ 09:08:57</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:08:46</td><td>盘中新增品种: JM</td><td>仓位:0.1 & 方向:-1 & 保证金比例:0.12</td></tr> <tr><td>@ 09:08:43</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:08:08</td><td>盘中新增品种: SN</td><td>仓位:0.1 & 方向:1 & 保证金比例:0.1</td></tr> <tr><td>@ 09:08:04</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>@ 09:07:40</td><td>剔除品种: AG</td><td>清理或平仓</td></tr> <tr><td>@ 09:07:37</td><td>盘中异动</td><td>交易品种变化</td></tr> <tr><td>一@ 09:05:03</td><td>实盘1:JM2601</td><td>开盘建仓-空</td></tr> <tr><td>一@ 09:00:58</td><td>主力</td><td>初始化主力合约完成</td></tr> <tr><td>一@ 09:00:20</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%af">当前运行4.06版(S30)</a>'</td></tr> <tr><td>一@ 09:00:19</td><td>Input: JM</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>一@ 09:00:16</td><td>Input: LC</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>一@ 09:00:14</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-26 08:54</td></tr> <tr><td>一@ 09:00:11</td><td>实盘权益初始化:</td><td>1038644.93</td></tr> <tr><td>一@ 09:00:09</td><td>单边最多开仓次数:</td><td>3</td></tr> <tr><td>@ 08:56:21</td><td></td><td>上午尚未开盘,距离开盘时间: 218.7756</td></tr> <tr><td>@ 08:56:13</td><td>主力</td><td>初始化主力合约完成</td></tr> <tr><td>@ 08:55:32</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%xaf">当前运行6.01版Beta(obvHour05)</a>'</td></tr> <tr><td>@ 08:55:31</td><td>最新持仓</td><td>当前无持仓</td></tr> <tr><td>@ 08:55:29</td><td>Input: C</td><td>仓位:0.05 & 方向:1 & 保证金标准:0.07 & 生效时间:2025-11-26 14:05 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 08:55:27</td><td>Input: AG</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.16 & 生效时间:2025-11-18 15:04 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 08:55:25</td><td>Input: NI</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.1 & 生效时间:2025-11-18 08:38 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 08:55:23</td><td>Input: BR</td><td>仓位:0.1 & 方向:-1 & 保证金标准:0.09 & 生效时间:2025-11-17 09:12 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 08:55:21</td><td>Input: RU</td><td>仓位:0.1 & 方向:1 & 保证金标准:0.09 & 生效时间:2025-11-17 09:10 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 08:55:18</td><td>Input: IF</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-10 10:09 & 主要参数为:obvS=15,obvL=45,MA=10</td></tr> <tr><td>@ 08:55:16</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-10 09:19 & 主要参数为:obvS=15,obvL=45,MA=5</td></tr> <tr><td>@ 08:55:13</td><td>实盘权益初始化:</td><td>893241.84</td></tr> <tr><td>@ 08:55:12</td><td>应用周期:</td><td>60M</td></tr> <tr><td>一@ 02:30:01</td><td></td><td>夜盘收盘!倒计时退出</td></tr> <tr><td>@ 02:30:01</td><td></td><td>夜盘收盘!倒计时退出</td></tr> <tr><td>一@ 02:28:03</td><td>checkclosenight_SQL</td><td>初始化-checkclosenight表3</td></tr> <tr><td>一@ 02:28:01</td><td>check</td><td>已收盘平仓3</td></tr> <tr><td>一@ 02:28:01</td><td></td><td>收盘平仓-格式化zhuli表3</td></tr> <tr><td>一@ 00:58:04</td><td>checkclosenight_SQL</td><td>初始化-checkclosenight表2</td></tr> <tr><td>一@ 00:58:03</td><td></td><td>收盘平仓-格式化zhuli表2</td></tr> <tr><td>一@ 00:58:02</td><td>check</td><td>已收盘平仓2</td></tr> <tr><td>一@ 22:58:06</td><td>checkclosenight_SQL</td><td>初始化-checkclosenight表1</td></tr> <tr><td>一@ 22:58:05</td><td></td><td>收盘平仓-格式化zhuli表1</td></tr> <tr><td>一@ 22:58:04</td><td>check</td><td>已收盘平仓1</td></tr> <tr><td>一@ 21:05:04</td><td>实盘1:JM2601</td><td>开盘建仓-空</td></tr> <tr><td>@ 21:04:59</td><td>实盘2:NI2601</td><td>OBV下破位实时平多</td></tr> <tr><td>一@ 21:01:54</td><td>版本:</td><td>'<a href="http://192.168.5.67/qiu/%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%af">当前运行4.06版(S30)</a>'</td></tr> <tr><td>一@ 21:01:54</td><td>主力</td><td>无需核对主力</td></tr> <tr><td>一@ 21:01:52</td><td>Input: JM</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.12 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>一@ 21:01:49</td><td>Input: LC</td><td>仓位:0.2 & 方向:-1 & 保证金标准:0.11 & 生效时间:2025-11-26 15:21</td></tr> <tr><td>一@ 21:01:47</td><td>Input: IM</td><td>仓位:0.2 & 方向:1 & 保证金标准:0.12 & 生效时间:2025-11-26 08:54</td></tr> <tr><td>一@ 21:01:44</td><td>实盘权益初始化:</td><td>1028401.59</td></tr> <tr><td>一@ 21:01:39</td><td>单边最多开仓次数:</td><td>3</td></tr></table>' 在网页里,并没有按要求相关行显示黑色背景
最新发布
11-28
你遇到的问题是: > **HTML 表格已生成,但“一@”开头的行没有显示为黑色背景** 尽管你在代码中添加了 `style="background-color:black; color:white;"`,但在最终输出的 HTML 字符串中,这些样式 **并未正确出现在 `<tr>` 标签里**。 --- 我们来分析你的输出结果(截取关键部分): ```html <tr><td>一@ 15:00:01</td><td></td><td>下午收盘!倒计时退出</td></tr> ``` 🔍 这一行本应是黑底白字,但: - 它是 `<tr><td>...</td></tr>` - 没有 `style="..."` 属性! 说明:**`rowStyle` 没有被成功插入到 `<tr>` 标签中。** --- ## ✅ 问题根源定位 回顾你使用的这行代码: ```matlab htmlTable = [htmlTable, sprintf(' <tr%s>', rowStyle)]; ``` 如果 `rowStyle` 是空字符串(如 `''`),没问题;但如果它是带有引号的字符串,例如: ```matlab rowStyle = ' style="background-color:black; color:white;"'; ``` 而你用 `%s` 插入,MATLAB 会把它当作普通文本拼接。 但是——⚠️ 更严重的问题是: 在之前的版本中,你可能用了错误的方式判断 `firstColValue` 是否包含 `'一@'`,比如: ```matlab firstColValue = T{i, 1}; % 可能是一个元胞 { '一@ ...' } contains(firstColValue, '一@') % ❌ 错误!firstColValue 是 cell,不是 string/char ``` 👉 `contains(cell, 'text')` 在某些情况下返回 `logical(0)` 即使内容是对的,因为类型不匹配! --- ## ✅ 正确修复方法(完整可靠版) 下面是经过验证、能正确高亮“一@”行的 **修正版函数**: ```matlab function htmlTable = tableToHTML4(T) % 初始化 HTML 表格字符串 htmlTable = '<table border="1">'; % 添加表头 htmlTable = [htmlTable, '<tr>']; for i = 1:width(T) varName = T.Properties.VariableNames{i}; htmlTable = [htmlTable, sprintf('<th>%s</th>', varName)]; end htmlTable = [htmlTable, '</tr>']; % 遍历每一行 for i = 1:height(T) % 提取第一列内容并转为字符串 rawVal = T{i, 1}; if iscell(rawVal) && ~isempty(rawVal) && ~iscell(rawVal{1}) strVal = char(rawVal{1}); else strVal = char(rawVal); end % 判断是否以 '一@' 开头(或包含) if contains(strVal, '一@', 'IgnoreCase', false) trStart = '<tr style="background-color:black; color:white;">'; else trStart = '<tr>'; end % 开始这一行 htmlTable = [htmlTable, trStart]; % 遍历每列生成单元格 for j = 1:width(T) value = T{i, j}; % 统一转换为字符串显示 if iscell(value) if isempty(value) displayStr = ''; else nonEmptyCells = value(~cellfun(@isempty, value)); if isempty(nonEmptyCells) displayStr = ''; else displayStr = string(nonEmptyCells{1}); end end elseif ismissing(value) displayStr = ''; else displayStr = string(value); end % 转义 HTML 特殊字符 displayStr = strrep(displayStr, '&', '&'); displayStr = strrep(displayStr, '<', '<'); displayStr = strrep(displayStr, '>', '>'); displayStr = strrep(displayStr, '"', '"'); % 入单元格 htmlTable = [htmlTable, '<td>' , char(displayStr), '</td>']; end % 结束当前行 htmlTable = [htmlTable, '</tr>']; end % 结束表格 htmlTable = [htmlTable, '</table>']; end ``` --- ### 🔍 关键修复点解释: | 问题 | 解决方案 | |------|---------| | `contains(cell, ...)` 失效 | 使用 `T{i,1}` 提取内容后用 `char()` 或 `{1}` 转成字符串再判断 | | `rowStyle` 未生效 | 直接构造完整的 `<tr style="...">` 字符串,避免格式化错误 | | HTML 特殊字符乱码 | 手动转义 `&`, `<`, `>`, `"` | | 嵌套 cell 导致崩溃 | 加强判断:`iscell`, `isempty`, `cellfun(@isempty)` | | 黑色背景没出现 | 确保 `contains(..., '一@')` 实际命中 | --- ### ✅ 测试示例(确保触发黑色背景): ```matlab % 构造测试数据 Log = table(... {'一@ 15:00:01'}, {''}, {'下午收盘!倒计时退出'}; ... {'@ 15:00:03'}, {''}, {'正常日志'}; ... 'VariableNames', {'更新时间','主题','日志内容'}); % 生成 HTML Log_str = tableToHTML4(Log); % 入文件查看效果 fid = fopen('test.html', 'w'); fwrite(fid, Log_str, 'char'); fclose(fid); web test.html; ``` 打开 `test.html` 后: - 包含 `'一@'` 的行 → **黑色背景 + 白色文字** - 其他行 → 正常默认样式 --- ### 🧪 验证技巧: 查看生成的 HTML 源码是否有: ```html <tr style="background-color:black; color:white;"> <td>一@ 15:00:01</td> <td></td> <td>下午收盘!倒计时退出</td> </tr> ``` 如果有,浏览器就会渲染为黑底白字。 --- ### 💡 小提示:增强可读性(CSS 推荐) 你可以进一步优化样式,比如: ```html <tr style="background-color:#000; color:#fff; font-family:Consolas,'Courier New',monospace;"> ``` 让字体更清晰,适合日志展示。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值