- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做类似Excel的事情,我有这样的事情:
1 2 3
A1 B1 C1
其中它替换指定内容的内容,其中A1替换1的内容。B1替换2的内容...等等...
我正在使用多维数组,并且我执行如下操作:
int offset = 0, readCharCount;
while(sscanf(matris[i][c] + offset, "%c%d%*c%n", &col, &linha, &readCharCount) == 2){
//printf("%c, %d\n", col, linha);
//strcpy(matris[i][c], matris[linha-1][col - 'A']);
offset += readCharCount;
//printf(" {%c, %d}", col, linha);
//printf("\n");
}
但是当我有A1+B1+C1和其他东西时,我无法替换全部内容,因为其他引用将被删除......
所以,在单元格 A1+B1+C1 处,我想将 B1 更改为指定的内容......我想要这样:
This -> A1+B1+C1
to -> 1+2+3
...
谢谢。
最佳答案
您可以重复使用此 c++ solution (通过硬编码 char*
来替换通用迭代器)。
我试了一下。但是,我想发出警告:看起来您正在尝试实现一个表达式解析器。我强烈建议你要么
这样你就不会陷入在 C 语言中容易出错的文本处理的尴尬境地。
Edit: I rewrote your C program using C++; you can see it working live here.
Edit 2: Another fixup of your C program in pure C: http://ideone.com/ExnufJ updated to support iterative expansions now, too
答案只涉及纯 C 方法:
那么,让我们开始吧。我假设了一个示例“电子表格”(它可以包含数字而不是字符串):
const char* cells[][4] = {
/* A B C D */
{ "the" , "lazy" , "cow" , "jumped" }, /* 1 */
{ "over" , "the" , "quick", "brown" }, /* 2 */
{ "paper", "packages", "tied" , "up" }, /* 3 */
{ "with" , "silver" , "white", "winters" }, /* 4 */
{ "that" , "melt" , "fox" , "springs" }, /* 5 */
};
仅使用两个助手:
const char* get_cell_value(const char* coordinate_b, const char* coordinate_e);
char* expand_cell_references(const char* f, const char* const l, char* o); /*the magic engine*/
我们可以编写以下演示程序:
int main()
{
const char in[] = "The C2 D2 C5 D1 A2 B2 B1 dog!";
char out[1024] = {0};
expand_cell_references(in, in+strlen(in), out);
puts(out); /* "The quick brown fox jumped over the lazy dog!" */
return 0;
}
根据注释打印众所周知的测试短语。现在,get_cell_value
非常简单:
const char* get_cell_value(const char* coordinate_b, const char* coordinate_e)
{
size_t col = 0, row = 0;
const char* it;
for (it=coordinate_b; it != coordinate_e; ++it)
{
if (*it >= 'A' && *it <= 'Z')
col = 26*col + (*it - 'A');
if (*it >= '0' && *it <= '9')
row = 10*row + (*it - '0'); /* or use atoi and friends */
}
row--; /* 1-based row nums in Excel */
return cells[row][col]; /* 1-based indexes in Excel */
}
并且 expand_cell_references
稍微复杂一点,是一个简单的 DFA 解析器:
char* expand_cell_references(const char* f, const char* const l, char* o)
{
enum parser_state {
other,
in_coord_col,
in_coord_row
} state = other;
/*temporary storage for coordinates being parsed:*/
char accum[16] = {0};
char* accit = accum;
while (f!=l)
{
switch(state) /*dummy, the transitions flow in fallthrough order for now*/
{
case other:
*(accit = accum) = 0; /*reset the accumulator*/
while (f!=l && !(*f>='A' && *f<='Z'))
*o++ = *f++;
/*fallthrough*/
case in_coord_col:
while (f!=l && *f>='A' && *f<='Z')
*accit++ = *f++;
/*fallthrough*/
case in_coord_row:
{
const char* expanded = accum;
if (f!=l && *f>='0' && *f<='9')
{
while (f!=l && *f>='0' && *f<='9')
*accit++ = *f++;
expanded = get_cell_value(accum, accit);
}
else
{
*accit = 0;
}
while (*expanded)
*o++ = *expanded++;
continue; /*state = other;*/
}
}
}
return o;
}
我在那里采取了一些捷径,因为这个语法非常简单,但它应该让您正确了解从哪里开始。
See a live demo here http://ideone.com/kS7XqB so you can play with it yourself. Note that I added debugging (asserts) to the
get_cell_value
function so you don't accidentally reference out-of-bounds indexes.
关于c - 更换字符串片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241897/
我需要能够用从 ajax 请求获得的响应替换整个文档内容。 我尝试分配给 document.body.innerHTML 并尝试使用 document.write()。虽然这两个功能都可以在桌面 Sa
我有一篇 jQuery 文章,用更新的产品替换了 div。网格是用同位素格式化的,但我不知道如何使其在更新后重新格式化网格。 $.post(url, function(data) { $('#
我正在使用gradle过滤使用以下代码替换一个log4j.xml中的 token 。 import org.apache.tools.ant.filters.ReplaceTokens task co
我正在尝试改变在 MacVim 中,减少腕管诱导。我添加了这一行 let mapleader="," 到我的 .gvimrc,但“\”仍然是唯一有效的键。我错过了什么吗? 最佳答案 该行需要进入正常的
我正在尝试: 将双空格替换为单空格。 干净 修剪 与我使用相同的字符串: AmountI = Replace(Application.WorksheetFunction.Clean(Trim(.Cel
在我的 NEO-MAIL.xml文件,我看到条目为: {neo.rootdir}/Mail/Spool 我的 ColdFusion 安装在 C:\ ,空间不足,所以我想将线轴移动到不同的目
将 Xstream 升级到 1.4.8 后,我注意到 XstreamConverter 和 XstreamRepresentation 已被弃用。 两个问题: 我应该替换我的 xstream 注释吗?
我有一个名为 fulldata 的数据对象,它是一个对象数组。 fulldata = [ {'key': 'abc', values: {.....},....}
我有一个网络应用程序正在运行从 csv 文件生成的数据库表。 此表需要经常从 csv 更新。该表需要与 csv 完全匹配,即如果 csv 中不再存在记录,则该记录不应再存在于表中或应被软删除。 执行此
我有一个 MySQL 数据库 mydb 和一个测试环境中的数据库 mytestdb,它镜像 mydb。我需要一种将更改从测试数据库“推送到实时数据库”的方法。所以伪代码的过程就像 for each t
因此,我制作了一个单独的迁移文件来更改数据库表中的列名称。问题是,当我尝试进入包含表的页面时,我在尝试更改的列名称上收到未定义的方法错误。 我的教授告诉我,我必须先更改 View / Controll
我正在尝试通过调用 -replacePassWithPass: 并传递与 PKPassLibrary 中已存在的完全相同的通行证来更新 Passbook 中的通行证。方法返回 NO(替换失败) - 为
我在替换 || 时遇到问题字符。 str="Example || sentence"; document.write(str.replace(/||/g, "+")); // it g
因此,我们有一项繁忙的旧 Web 服务需要被新服务取代。旧版 Web 服务是使用 WAR 文件部署在 apache tomcat 服务器上的。也就是说,它被复制到 tomcat 下的 web apps
对于我目前正在开发的应用程序,我们希望从用户的 SIM 卡中读取数据,这工作正常。我们想让用户可以在应用程序运行时切换 SIM 卡。执行此操作时,操作系统请求设备重启,我们似乎无法抑制此消息。 有没有
手机换卡时如何访问事件? 最佳答案 基本上,这个问题“How to monitor SIM state change”的答案也是您问题的正确答案。 所以你创建了一个新类 package a.b.c;
我的代码中包含以下两行:- instanceMethod = new.instancemethod(testFunc, None, TestCase) setattr(TestCase, testNa
这个问题在这里已经有了答案: Explain example pipeline from Python subprocess module (1 个回答) 关闭去年。 在 subprocess 模块
如 Controller已弃用,有没有好的替代品? 我明白为什么它被弃用了,但现在需要找到它的替代品。 假设我需要将一些函数发布到HTML(因此无法使用Decorators),但没有任何模板HTML(
我有一个小代码可以在一列中格式化电话号码,从某种意义上说: -如果中间有空格,则将其删除 - 之后,从右边开始取 9 个数字,并检查它是否为整数,如果是,则将其放入单元格中。 问题是完成所有替换需要将
我是一名优秀的程序员,十分优秀!