打印字符串的任意一部分

使用printf()函数打印字符串的任意部分,请看下例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char * source_str = "THIS IS THE SOURCE STRING" ;

    /* Use printf() to print the first 11 characters of source_str. */
    printf("First 11 characters: ' %11.11s'\n" , source_str);

    /* Use printf() to print only the last 13 characters of source _str. */
    printf("Last 13 characters:'%13.13s'\n", source_str+(strlen(source_str)-13));
}

输出结果为:   
First 11 characters: 'THIS IS THE'   
Last 13 characters:'SOURCE STRING'

在上例中,第一次调用printf()函数时,通过指定参数"%11.11s",迫使printf()函数只打印11个字符的长度,因为源字符串的长度大于11个字符,所以在打印时源字符串将被截掉一部分,只有头11个字符被打印出来。第二次调用printf()函数时,它将源字符串的最后13个字符打印出来,其实现过程为:
(1)用strlen()函数计算出source_str字符串的长度,即strlen(source_str)。
(2)将source_str的长度减去13(13是将要打印的字符数),得出source_str中剩余字符数。
(3)将strlen(source_str)-13和source_str的地址相加,得出指向source_str中倒数第13个字符的地址的指针;即source_str+(strlen(source_str)-13)。这个指针就是printf()函数的第二个参数。
(4)通过指定参数“%13.13s”,迫使printf()函数只打印13个字符的长度,其结果实际上就是打印源字符串的最后13个字符。

 

关于“S格式符”的用法的简单说明:

(1) %ms :输出的字符串占m列,如果字符串本身长度大于m,则突破m的限制,将字符串全部输出;若串长度小于m,则在左边补空格。
 (2) %-ms:如果字符串长度小于m,则在m列范围内,字符串向左靠,右补空格。
 (3) %m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列范围的右侧,左补空格。
 (4) %-m.ns:其中的m、n的含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则m自动取n值,即保证n个字符正常输出。



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个基于 C 语言的字符串截取函数,可以截取给定字符串任意位置任意长度的子字符串: ```c #include <stdio.h> #include <string.h> void substring(char *dest, const char *src, int start, int len) { int src_len = strlen(src); if (start < 0 || start >= src_len || len <= 0) { *dest = '\0'; return; } if (len > src_len - start) { len = src_len - start; } strncpy(dest, src + start, len); dest[len] = '\0'; } int main() { char src[] = "Hello, World!"; char dest[20]; substring(dest, src, 1, 4); printf("%s\n", dest); // 输出 "ello" substring(dest, src, 7, 20); printf("%s\n", dest); // 输出 "World!" substring(dest, src, 0, 5); printf("%s\n", dest); // 输出 "Hello" substring(dest, src, 13, 5); printf("%s\n", dest); // 输出 "" return 0; } ``` 这个函数接受三个参数:目标字符串 `dest`、源字符串 `src`、要截取的子字符串的起始位置 `start` 和长度 `len`。如果 `start` 小于 0 或大于等于源字符串的长度,或者 `len` 小于等于 0,那么目标字符串将被置为空字符串。如果要截取的子字符串长度超过了源字符串的可用长度,则截取到源字符串的末尾。 函数主体中使用了 `strncpy` 函数来实现字符串截取,它的作用是从源字符串的第 `start` 个字符开始,复制 `len` 个字符到目标字符串中。这里还要注意的是,为了确保目标字符串以空字符结尾,我们在复制完子字符串后手动添加了一个空字符。 在上面的示例代码中,我们使用这个函数分别截取了源字符串的不同部分,并打印了结果。你可以根据自己的需要修改这个函数的参数和返回值类型来适应不同的使用场景。希望这个回答能对你有所帮助,如果你有任何问题或者需要进一步的帮助,请随时告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值