- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
“练习 1-23。编写一个程序来删除 C 程序中的所有注释。不要忘记处理带引号的字符串和字符常量适本地。 C 注释不能嵌套。”K&R pg.34
基本上,我有两个问题:
1)我是全新的编码者,我想知道我是否至少以正确的方式思考这个问题。
2) 代码的构建是为了忽略 //
直到 \n
或 /*
直到 */
。但是无论 /*
注释它总是留下一个 /
。
输入: abc/*comment*/123
输出: abc/123
输入: abc/*123
输出: abc/
#include <stdio.h>
char s[1000]; //Principal array
int countS; //Number of char in array
int deletSingleLineComments(void);
int deletMultiLineComments(void);
int main(void){
int c;
while((c=getchar())!=EOF){
s[countS]=c;
++countS;
}
deletMultiLineComments(); //Function 1
deletSingleLineComments(); //Function 2
printf("\ns[]=\n%s\n\ncountS[]=%d\n",s,countS);
}
//Functions 1
int deletMultiLineComments(void){
char t[1000];
int i=0;
int inComment=0;
int diff=0;
int a,b,c;
while(i<=countS){
t[i]=s[i];
++i;
}
i=0;
while(i<=countS){
if(t[i]=='/' && t[i+1]=='*'){
inComment=1;
}
if(inComment==1){
++diff; //to equilibrate the number
}
if(inComment==0){
s[i-diff]=t[i];
}
if(t[i]=='*' && t[i+1]=='/'){
inComment=0;
}
++i;
}
s[i-diff+1]='\0';
countS=i-diff;
printf("\nt[]=\n%s\n",t);
}
//Function 2
int deletSingleLineComments(void){
int i=0;
char t[1000];
int inComment=0;
int diff=0;
while(i<=countS){
t[i]=s[i];
++i;
}
i=0;
while(i<=countS){
if(t[i] == '/' && t[i+1] == '/'){
inComment=1;
}
if(t[i]=='\n'){
inComment=0;
}
if(inComment==1){
++diff;
}
if(inComment==0){
s[i-diff]=t[i];
}
s[i-diff+1]='\0';
++i;
}
countS=i-diff;
}
谢谢。
最佳答案
while(i<=countS){ t[i]=s[i];... }
请注意,字符串是从零开始的。例如"ABC"
长度3
,它从零索引开始,最后一个有效索引是 2
(不是 3
)。因此,您应该将条件更改为 i < string_length
while(i < countS){ t[i]=s[i];... }
访问 t[i+1]
时也要小心,因为同时i
有效,i+1
可能会超出范围。
if (i < (countS - 1))
if(t[i]=='/' && t[i+1]=='*')
为了将一个字符串分配给另一个字符串,您可以引入第二个变量 k
,并增加 k
每次作业后。 (在我看来)此方法比使用 diff
更容易变量并进行加法和减法。
此外,而不是 char t[1000];
,您可以使用char *t = malloc(countS);
声明一个长度为 countS
的临时变量,那么最后必须用 free(t)
释放它。如果你的编译器支持变长数组,你可以直接输入 char t[countS]
.
示例:
char s[1000]; //Principal array
int countS; //Number of char in array
//Functions 1
void deletMultiLineComments(void)
{
char *t = malloc(countS);
int i = 0;
int k = 0;
int inComment = 0;
while (i < countS)
{
t[i] = s[i];
++i;
}
i = 0;
while (i < countS)
{
if (i < countS - 1)
if (t[i] == '/' && t[i + 1] == '*')
{
inComment = 1;
i+=2;
continue;
}
if (inComment == 1)
{
if (i < countS - 1)
if (t[i] == '*' && t[i + 1] == '/')
{
inComment = 0;
i+=2;
continue;
}
}
if (inComment == 0)
{
s[k] = t[i];
k++;
}
++i;
}
free(t);
s[k] = '\0';
countS = k;
printf("mulitline comment removed %s\n", s);
}
//Function 2
void deletSingleLineComments(void)
{
char *t = malloc(countS);
int i = 0;
int k = 0;
int inComment = 0;
while (i < countS)
{
t[i] = s[i];
++i;
}
i = 0;
while (i < countS)
{
if (i < countS - 1)
if (t[i] == '/' && t[i + 1] == '/')
{
inComment = 1;
i += 2;
continue;
}
if (t[i] == '\n')
{
inComment = 0;
}
if (inComment == 0)
{
s[k] = t[i];
k++;
}
i++;
}
free(t);
s[k] = '\0';
countS = k;
printf("single comment removed %s\n", s);
}
int main(void)
{
//get input
scanf("%s", s);
countS = 0;
while (s[countS]) countS++;
deletMultiLineComments(); //Function 1
deletSingleLineComments(); //Function 2
}
关于c - K&R 执行官。 1-23 : Some Complications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39950048/
我想知道如果我不支持它,如何不显示复杂功能系列。 示例:超大表盘 在 ComplicationController.swift的 getLocalizableSampleTemplate和 getCu
我正在使用 Xcode 10 和 watchos 5。 我已将应用程序图标添加到我的 watchOS 应用程序中,以添加到 Apple Watch 应用程序(阿尔法 channel 和不同尺寸的任何一
Test File 有时,我的电子邮件列表包含同一个人的重复地址。例如,Jane 的地址都是“jane.doe@email.com”和“doe.jane@email”。她的变体包括替换“。”用“-”或
我在 swift 中收到来自 CoreMotion 查询的 CMLogItem(可能是加速度计、陀螺仪)。现在,我想获取该样本的时间戳,最好是 Date() 对象。 CMLogItem 具有类型为 T
我有用 php 编写代码的基本知识,但我被困在逻辑过程中。希望我能在这里得到一些帮助。 问题: 我想根据表现比较并宣布 2 名 worker 之间的获胜者。详情如下: $working_first =
我正在尝试构建一个应用程序,它支持 watch OS2 上的多个复杂功能系列,例如模块化大、实用大、圆形小等,每个都显示来自应用程序的各种有意义的信息。我知道复杂性与我们自 OS1 以来在用户交互方面
我正在尝试安装一个通用的应用程序,以便在其中集成第三方服务。他们有一个OAUTH流程,用户单击一个按钮,然后重定向到他们的网站以登录并“授予”我的应用程序对其服务(有点类似于facebook)的访问权
我正在尝试构建一个正则表达式来筛选有效零件和/或序列号的组合以及范围。 有效的部件号是两个字母、三个数字的模式或/[A-z]{2}\d{3}/ i.e. aa123 or ZZ443 etc... 一
我需要存储由主要 Watch 应用程序(和 iPhone 应用程序)控制并显示在复杂功能中的数据。 official Apple documentation说 If you need to fetch
我一直在努力理解这个程序的输出: #include int main(){ static int arr[] = {0, 1, 2, 3, 4}; int *p[] = {ar
我正在为大学做一个数据库项目,我在这里遇到了一个问题。我试图在没有 session 时显示“登录”,在有 session 时显示“注销”。但实际上即使在我登录后它仍然显示我“登录”并且我尝试 prin
我正在使用 ios 9.2 和 xcode 7.2 在 objective-c 中开发一些 clockkit 并发症 我在这里看了一个很棒的视频 https://developer.apple.com
我正在尝试让自定义 ClockKit Complication 正常工作。 我创建了一个符合 CLKComplicationDataSource 的自定义 ComplicationController
我被问到在 Git 中是否可以执行以下操作,这超出了我的知识范围: 给定以下场景: 我从主干创建了一个新分支“cool-feature”并在其中做了一些工作 我从“cool-feature”创建了另一
在处理了几天的复杂问题之后,对于按规定时间间隔发生的更新的更新过程,我有信心说出以下内容: 系统调用requestedUpdateDidBegin() 在这里您可以确定您的数据是否已更改。如果没有,则
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我有这个 JSON 字符串: { "success":true,"user_id":"309","id":"309","sessId":false,"email":null,"name":"Mai
我想将两个查询放在一起;一份来 self 的 posts 表,一份来 self 的 store_products 表,并在同一页面上显示结果。 所以我想拿这个... SELECT p.id
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我使用this使用规范附带查询参数来生成动态查询的方法。它工作得很好。但通过这种方式,我可以使用简单的 .and() 或 .or()。 我的问题是处理像 where ((a & b)|(c & d)
我是一名优秀的程序员,十分优秀!