在 C 中,如何将一个字符串分成 3 个短裤,并将其余的字符串分成一个字符串(该字符串作为其中的空格)?

发布于 2024-12-08 22:59:06 字数 272 浏览 0 评论 0原文

如何将 3 个短裤之间以及字符串其余部分之间有空格的字符串分成 4 个不同的字符串。

示例:

"123 402 10 aaa bbb cc".

我想要的只是

 short i=123;
 short j=402;
 short y=10;
 char * c="aaa bbb cc".

尝试使用 sscanf 来执行此操作,但由于空白,我似乎无法掌握最后一个字符串的工作原理。

How can I separate a string that has white spaces between the 3 shorts and between the rest of the string to 4 different strings.

Example:

"123 402 10 aaa bbb cc".

What I want is simply

 short i=123;
 short j=402;
 short y=10;
 char * c="aaa bbb cc".

I was trying to use sscanf to do it but I can't seem to get the hang of getting that last string to work cause of the white space.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

四叶草在未来唯美盛开 2024-12-15 22:59:06

一种方法可以是:

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

int main()
{
    const char* str = "123 402 10 aaa bbb cc";
    short i,j,y;
    char c[256];
    if (sscanf(str, "%hd %hd %hd %255[^\n]", &i, &j, &y, c) == 4) {
        printf("i=%hd j=%hd y=%hd c=\"%s\"\n", i, j, y, c);
    }
    return 0;
}

One way to do it could be:

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

int main()
{
    const char* str = "123 402 10 aaa bbb cc";
    short i,j,y;
    char c[256];
    if (sscanf(str, "%hd %hd %hd %255[^\n]", &i, &j, &y, c) == 4) {
        printf("i=%hd j=%hd y=%hd c=\"%s\"\n", i, j, y, c);
    }
    return 0;
}
溺孤伤于心 2024-12-15 22:59:06

这并不困难:

#include <stdio.h>

int main() {
  short i, j, y;
  char text[80];

  if (sscanf("123 402 10 aaa bbb cc\nsecond line", "%hd %hd %hd %79[^\n]", &i, &j, &y, text) == 4) {
    printf("success: i=%d, j=%d, y=%d, text=%s\n", i, j, y, text);
  }
  return 0;
}

请注意,您必须自己为字符串分配缓冲区,并确保不会发生缓冲区溢出。

It's not that difficult:

#include <stdio.h>

int main() {
  short i, j, y;
  char text[80];

  if (sscanf("123 402 10 aaa bbb cc\nsecond line", "%hd %hd %hd %79[^\n]", &i, &j, &y, text) == 4) {
    printf("success: i=%d, j=%d, y=%d, text=%s\n", i, j, y, text);
  }
  return 0;
}

Note that you have to allocate the buffer for the string yourself and make sure that no buffer overflow happens.

苏大泽ㄣ 2024-12-15 22:59:06

您不需要sscanf。您可以使用 strchr 查找空格,使用 atoi 将字符串转换为整数,并使用简单的赋值将空格转换为终止零。

您也可以这样做:

#include <stdio.h>
int main(void)
{
 const char *test="123 402 10 aaa bbb cc";
 short i, j, y;
 char c[128];
 sscanf(test, "%hd%hd%hd %[^\n]s", &i, &j, &y, c);
 printf("i=%d j=%d y=%d c='%s'\n", i, j, y, c);
}

产量:i=123 j=402 y=10 c='aaa bbb cc'

You don't need sscanf. You can use strchr to find the spaces, atoi to turn strings into integers, and simple assignment to turn the spaces into terminating zeroes.

You can also do this:

#include <stdio.h>
int main(void)
{
 const char *test="123 402 10 aaa bbb cc";
 short i, j, y;
 char c[128];
 sscanf(test, "%hd%hd%hd %[^\n]s", &i, &j, &y, c);
 printf("i=%d j=%d y=%d c='%s'\n", i, j, y, c);
}

Yields: i=123 j=402 y=10 c='aaa bbb cc'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文