转载:%s格式化用法

Python打印格式详解

1.打印字符串

print("My name is %s" %("Alfred.Xue"))
#输出效果:
My name is Alfred.Xue

2.打印整数

print("I am %d years old." %(25))
#输出效果:
I am 25 years old.

3.打印浮点数

print ("His height is %f m"%(1.70))
#输出效果:
His height is 1.700000 m

4.打印浮点数(指定保留两位小数)

print ("His height is %.2f m"%(1.70))
#输出效果:
His height is 1.70 m

5.指定占位符宽度

print ("Name:%10s Age:%8d Height:%8.2f"%("Alfred",25,1.70))
#输出效果:
Name:    Alfred Age:      25 Height:    1.70

6.指定占位符宽度(左对齐)

print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Alfred",25,1.70))
#输出效果:
Name:Alfred     Age:25       Height:1.70

7.指定占位符(只能用0当占位符?)

print ("Name:%-10s Age:%08d Height:%08.2f"%("Alfred",25,1.70))
#输出效果:
Name:Alfred     Age:00000025 Height:00001.70

8.科学计数法

format(0.0026,'.2e')
#输出效果:
'2.60e-03'

 

 

 

字符串格式化代码:

格式描述
%%百分号标记
%c字符及其ASCII码
%s字符串
%d有符号整数(十进制)
%u无符号整数(十进制)
%o无符号整数(八进制)
%x无符号整数(十六进制)
%X无符号整数(十六进制大写字符)
%e浮点数字(科学计数法)
%E浮点数字(科学计数法,用E代替e)
%f浮点数字(用小数点符号)
%g浮点数字(根据值的大小采用%e或%f)
%G浮点数字(类似于%g)
%p指针(用十六进制打印值的内存地址)
%n存储输出字符的数量放进参数列表的下一个变量中

转载于:https://www.cnblogs.com/lijialun/p/10109716.html

<think>好的,我现在需要帮助用户了解如何在C语言中实现子串匹配算法,并提供示例代码和解释。首先,我需要确定用户的具体需求。他们提到“子串匹配”,这可能指的是在一个主字符串中查找是否存在某个子串,并返回其位置。常见的算法包括暴力匹配(BF算法)、KMP算法、Sunday算法等。根据用户提供的引用内容,他们可能对BF算法和KMP算法有一定了解,但需要具体的C语言实现示例。 接下来,我需要检查用户提供的引用内容,特别是引用3和引用4。引用3提到了BF算法和Sunday算法的C语言实现,而引用4中的LeetCode代码似乎是BF算法的另一种实现。用户的问题是关于子串匹配的,因此我需要选择一种合适的算法进行示例。考虑到用户可能希望一个简单易懂的示例,暴力匹配(BF算法)是一个不错的选择,因为它虽然效率不高,但实现简单,适合教学。 然后,我需要确保代码的正确性和可读性。引用4中的代码虽然有效,但使用了C++的string类,而用户要求的是C语言实现。因此,我需要调整代码,使用C语言的字符串处理函数,比如strlen和字符数组。同时,代码需要符合C语言的语法规范,例如使用指针或数组索引来遍历字符串。 在解释代码时,需要逐步说明每个部分的作用,例如初始化索引、循环条件、字符比较逻辑以及指针回溯处理。此外,需要提到该算法的时间复杂度,以及可能的优化方向,比如使用KMP算法或Sunday算法,这些在引用2和引用3中都有提及,可以引导用户进一步学习。 还需要确保回答的结构清晰,分步骤解释代码,并最后生成相关问题。用户提到的引用中有关于字符串算法的重要性(引用1)、KMP算法的讲解(引用2)、BF和Sunday算法的实现(引用3、4),这些都可以作为相关问题的来源,例如询问其他算法或优化方法。 最后,需要检查是否符合系统级指令,如使用正确的LaTeX格式,独立公式单独成段,正确引用文献(引用3和引用4),以及生成相关问题。确保所有数学表达式如时间复杂度用$O(nm)$正确格式化,代码块使用正确的语法高亮,并避免任何Markdown格式错误。</think>以下是C语言实现子串匹配的暴力匹配(BF算法)示例代码及逐步解释: ```c #include <stdio.h> #include <string.h> int bf_match(const char *haystack, const char *needle) { int len1 = strlen(haystack); int len2 = strlen(needle); // 主串遍历索引 for (int i = 0; i <= len1 - len2; i++) { int j; // 子串逐个字符匹配 for (j = 0; j < len2; j++) { if (haystack[i + j] != needle[j]) { break; } } // 完全匹配则返回起始位置 if (j == len2) { return i; } } return -1; } int main() { char text[] = "algorithm_visualization"; char pattern[] = "vis"; int pos = bf_match(text, pattern); if (pos != -1) { printf("Pattern found at index: %d\n", pos); } else { printf("Pattern not found\n"); } return 0; } ``` ### 代码解析 1. **初始化参数** `len1`获取主串长度,`len2`获取子串长度。外层循环条件`i <= len1 - len2`确保剩余主串长度足够匹配 2. **滑动窗口匹配** 主循环每次移动主串起始位置$i$,内层循环逐个比较子串字符。时间复杂度为$O(nm)$,其中$n$和$m$分别为主串和子串长度[^3] 3. **回溯处理** 当发现不匹配字符时,通过`break`跳出内层循环,主串指针回退到$i+1$位置重新开始匹配。这与KMP算法的智能跳跃形成对比[^2] 4. **结果判定** 内层循环完整执行时(`j == len2`)表示找到子串,返回当前主串起始位置$i$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值