大哥大姐们,删除右边星号的程序,但是调用函数的部分不理解,求详细的解释,谢谢了!

浮生如梦VIP 2011-06-02 05:51:07
本程序是删除字符串右边所有的*号,高手们给出了程序,但是调用函数部分不理解,还望解释的
更清除一下,具体如下。


#include <stdio.h>
void main()
{
void Delete(char *s);
char a[90],*p;
p=a;
printf("输入一个字符串\n");
gets(a);
Delete(p);

printf("%s\n",a);



}

void Delete(char *s)
{
for(;*s;s++);//这句我理解的意思是:使循环能够进行下去。
while(*--s=='*');//这一句是怎么执行的?有什么作用?
*++s='\0';//不是删除右边的星号吗?我总感觉把结束符放在了前面,不能够实现该功能呀!





}
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shi3590 2011-06-03
  • 打赏
  • 举报
回复
LS说的已经够详细了。
其实遇到看不太懂的程序,可以断点debug单步一下,看看参数变化,也能找到答案。
AnYidan 2011-06-03
  • 打赏
  • 举报
回复


void Delete(char *s)
{
for(;*s;s++);// 字符串结尾字符时 '\0',指针指向字符串尾

while(*--s=='*'); // 向前移动指针,并判断是否指向 *,是则继续前移,不是推出

*++s='\0'; //是将从右边开始的那一串'*'的最左边的'*'置为'\0',在此截断字符串


}
蓝染忽右介 2011-06-03
  • 打赏
  • 举报
回复
来晚了!!!!
date_1002 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anyidan 的回复:]
C/C++ code


void Delete(char *s)
{
for(;*s;s++);// 字符串结尾字符时 '\0',指针指向字符串尾

while(*--s=='*'); // 向前移动指针,并判断是否指向 *,是则继续前移,不是推出

*++s='\0'; //是将从右边开始的那一串'*'的最左边的'*'置为'\0',在……
[/Quote]

这个比较容易理解
iunion 2011-06-03
  • 打赏
  • 举报
回复

void Delete(char *s)
{
for(;*s;s++); // 将指针s,移到字符串末尾 '\0'处,此时s指针为'\0'

while(*--s=='*'); // 将指针S前移一位(--s),判断s指针位置是否是 '*',如果是再将指针前移一位,继续判断,不是进入下一语句

*++s='\0'; //因为前面在查找'*'时多退了一位,所以现后移一位(++s),在置为'\0'

}

shun_qizi_ran 2011-06-02
  • 打赏
  • 举报
回复
从后往前扫描,如果是*号就继续向前,直到不是*号,这样只能是*号连着的
yrw8888888 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q191201771 的回复:]

for(;*s;s++);
是把s指向字符串最后去

while(*--s=='*');
是从字符串后面往前扫描到不等于'*'

*++s='\0'
是将从右边开始的那一串'*'的最左边的'*'置为'\0'

至于那些前置++后置++的东西你自己仔细拿捏一下吧

我认为把右边那一串'*'全部置'\0'更好
[/Quote]

up
就想叫yoko 2011-06-02
  • 打赏
  • 举报
回复
for(;*s;s++);
是把s指向字符串最后去

while(*--s=='*');
是从字符串后面往前扫描到不等于'*'

*++s='\0'
是将从右边开始的那一串'*'的最左边的'*'置为'\0'

至于那些前置++后置++的东西你自己仔细拿捏一下吧

我认为把右边那一串'*'全部置'\0'更好
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 在Android系统上达成蓝牙与便携式打印机的连接,通常包含了一系列技术要素和操作流程。名为"Android连接蓝牙打印机(cpcl指令)Demo完整版"的项目提供了一个全面的解决方案,它运用了专门的打印机指令集——CPCL(Control Program for ClearType Language),该指令集主要用于操控打印作业,尤其适用于标签和面单的打印。以下是关于此主题的详尽阐述: 1. **蓝牙传输打印**:Android平台内置了`BluetoothAdapter`类别用于管理蓝牙数据交互。必须确认设备已启用蓝牙功能,随后对邻近的蓝牙设备进行探测。`startDiscovery()`函数负责启动搜寻过程,而`getBondedDevices()`能够列出已建立配对的设备。 2. **建立与便携打印机的联系**:当识别出目标打印机后,可借助`BluetoothDevice`类中的`createRfcommSocketToServiceRecord()`函数构建RFCOMM(蓝牙串行端口协议)的通道。一旦连接建立成功,便可通过`connect()`函数与打印机展开信息交流。 3. **CPCL编码**:CPCL是一种与ESC/POS类似的页面描述性语言,它用于调控打印机的输出格式、文字样式、条形码等。比如,`^PJL`用于设定页面布局,`^FO`指定输出位置,`^A`设定字体尺寸,`^BC`生成条形码,`^PG`执行分页操作。在Android程序中,需将CPCL编码转为文本格式,再经由蓝牙通道传输至打印机。 4. **博思达软件开发工具包**:博思达作为一家著名的打印...

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧