作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
故事:大字符串是 aaa&bbb
由两个小字符串组成,大字符串中分隔两个小字符串的是 &
符号。
任务:使用最有效的方法分别打印第一个和第二个小字符串。
代码:
char big_str[8] = "aaa&bbb";
期望的输出:
aaa
bbb
最佳答案
最简单的方法就是使用字段宽度和'.'
"%s"
的修饰符printf
中的格式说明符和一些指针,例如
#include <stdio.h>
#include <string.h>
int main (void) {
char big_str[] = "aaa&bbb",
*p = strchr (big_str, '&'),
*ep = p + 1;
if (p)
printf ("%.*s\n%s\n", (int)(p - big_str), big_str, ep);
return 0;
}
示例使用/输出
$ ./bin/splitand
aaa
bbb
将值分隔成单独的字符串
要实际分离这些值,您可以以完全相同的方式处理它,只不过不是简单地打印输出,而是分配存储空间来保存每个字符串并将所需的字符复制到每个新的内存块。然后您可以按照您喜欢的方式使用单独的字符串,例如
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
char big_str[] = "aaa&bbb",
*p = strchr (big_str, '&'),
*first, *second; /* pointers to allocate to hold first/second */
if (p) { /* validate '&' located */
char *ep = p + 1; /* ep now points to next char after '&' */
if (!(first = malloc (ep - big_str))) { /* allocate/validate first */
perror ("malloc-first");
return 1;
}
memcpy (first, big_str, p - big_str); /* memcpy to first */
first[p - big_str] = 0; /* nul-terminate */
if (!(second = malloc (strlen(ep) + 1))) { /* allocate second */
perror ("malloc-second");
return 1;
}
strcpy (second, ep); /* strcpy is fine here */
printf ("first : %s\nsecond : %s\n", first, second);
free (first); /* don't forget to free what you allocate */
free (second);
}
}
示例使用/输出
$ ./bin/splitanddyn
first : aaa
second : bbb
如果您还有其他问题,请告诉我。
关于c - 分别打印粘合在一起的 2 个小绳子的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58249850/
我是一名优秀的程序员,十分优秀!