请帮我详细解释一下这段PHP代码,谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请帮我详细解释一下这段PHP代码,谢谢相关的知识,希望对你有一定的参考价值。

<?php
echo sprintf("<b>%'_20.2f %'_20.2f %'_20.2f <br /></b>","111","222","333");
?>
%'_20.2f中 %,',_,20,.,2f 各是什么意思

sprintf() 函数把格式化的字符串写写入一个变量中。
参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

%% - 返回百分比符号
%b - 二进制数
%c - 依照 ASCII 值的字符
%d - 带符号十进制数
%e - 可续计数法(比如 1.5e+3)
%u - 无符号十进制数
%f - 浮点数(local settings aware)
%F - 浮点数(not local settings aware)
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
---------------------------------------解释--------------------------------------------
%_20.2f 的意思是用小数形式显示数据,一共长度是20位。位数不够的时候使用下划线(_)来补充位数
参考技术A 这个不应该是PHP代码吧,这个应该是C语言里面的代码啊 参考技术B 正则表达式?

请帮我解释一下这个函数(C语言)

题目:编写一个函数,输入一行字符,将此字符串中最长的单词输出。
#include <stdio.h>
#include<string.h>
void main()
int alphabetic(char);
int longest(char[]);
int i;
char line[100];
printf("input one line:\n");
gets(line);
printf("The longest word is:");
for(i=longest(line);alphabetic(line[i]);i++)
printf("%c",line[i]);
printf("\n");


int alphabetic(char c)
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return(1);
else
return(0);


int longest(char str[])
int i,len=0,length=0,flag=1,place=0,point;
for(i=0;i<strlen(str);i++)
if(alphabetic(string[i]))
if(flag)
point=i;
flag=0;

else len++;
else
flag=1;
if(len>=length)
length=len;
place=point;
len=0;



return(place);


因为我是初学者,有点不懂这个程序,可以帮我详细解释一下吗?谢谢。
(1)最不懂int longest(char str[]) 一下的部分
(2)这句看不懂:for(i=longest(line);alphabetic(line[i]);i++)
(3)整个程序是如何运行的呢?


#include <stdio.h>
#include<string.h>
void main()

int alphabetic(char);
int longest(char[]);
int i;
char line[100];
printf("input one line:\\n");
gets(line);
printf("The longest word is:");
for(i=longest(line);alphabetic(line[i]);i++)
 printf("%c",line[i]);

printf("\\n");

//这是一个判断字符是否是英文字母的函数
//是则返回1,不是则返回0
 int alphabetic(char c)
 
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return(1); 

else
return(0);

  
 //这个函数是来统计哪一个连续字母子字符串最长
 //并返回那个子字符串在str中的起始位置
int longest(char str[]) 

int i,len=0,length=0,flag=1,place=0,point; 
for(i=0;i<strlen(str);i++) //循环str中所有的字符
//判断是否是字母,如果是(返回1)则进入,
//否则(返回0)进入else语句
if(alphabetic(str[i])) //根据代码来看不是string[i],更改之
if(flag)//flag标志应该是指是否是连续出现字母 

point=i;//记录当前全是字母的子字符串的起始位置
flag=0;//更改标记,下一次如还是字母就不能再进这个if判断了,而应该是进入else,把长度+1
 
else 
len++; 
else
flag=1;//如果出现了非字母,那么将标记置为1,以便下次出现字母时,进入判断的if中,而不是else中 
if(len>=length) //如果之前有出现连续字母的情况或者新的子字符串大于上一个的长度,则进入

length=len; //记录新的长度
place=point; //记录新的起始位置
len=0; //将这个变量置为0,以便下一次的记录
 
 

return(place); //返回最长字母字符串的起始位置

追问

你好,我运行一下这个程序,输出的不是最长的那个单词,是哪里出现问题了吗?

追答

哦,试了半天发现才发现你说的情况。
当时没注意看代码,是这个样子滴(输入下图中的字符)

这样子的话,在判断了最后一个字母h的时候,会进入那个 len++的语句,然后不执行记录位置的那个语句了,最后一次的for循环就直接结束了,进入最后一句代码。

这样的原因是,原代码中记录下最长字母的语句是和if(alphabetic(str[i])) 是同一级别的,只有在if(alphabetic(str[i]))判断不是字母的时候才会执行。


所以最简单的改法就是,在那个

longest(char str[]) 的for循环语句的最后加上

if (i == strLength -1)//如果是最后一次则再判断一次

if(len>length) 

length=len;
place=point;
len=0;



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



另外发现另外一个问题,在

if(flag)//flag标志应该是指是否是连续出现字母 

point=i;//记录当前全是字母的子字符串的起始位置
flag=0;//更改标记,下一次如还是字母就不能再进这个if判断了,而应该是进入else,把长度+1
 
这段语句中也应该写上 len++ 哦....

参考技术A 这个程序有问题吧。编译肯定不过哎
(1)把第三个函数快中的string改成str就对了 ;这是求最长单词从何处开始的
(2)初值:最长单词的开始初;条件:下一个字符是字母;
(3)输入一个字符串,求出最长单词的头字母所在位置,输出最长的单词追问

str那里是我不小心打错了

追答

改了之后就ok了啊

参考技术B 此程序存在严重错误,不能运行。追问

请问哪里有错误?

追答

C参照2楼回答,我就不看了,

以上是关于请帮我详细解释一下这段PHP代码,谢谢的主要内容,如果未能解决你的问题,请参考以下文章

请帮我解决PHP代码[关闭]

帮我解释下一个java程序 谢谢(高手进).

PHP+mysql分页的问题,我用了php万能分页的代码,但是不好用,请帮我看看是啥问题?说19行不对,请指教

PHP代码,能详细解释一下每行的意思么?多谢了

单片机中中断服务函数 有哪位大神能帮我解释一下下面这段程序啥意思,就算能让我清楚一点也成,谢谢了

求大神 关于 pandas请帮我看下 线面这段代码 我用 jupyter notebook 运行 显示 错误