gpt4 book ai didi

c - 用 C 拆分字符串

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:52 24 4
gpt4 key购买 nike

基本上程序应该将名称拆分为 F 和 L 名称。用户将他们的名字组合或与空格一起输入(例如 AlexTank 或 Alex Tank)。该程序应读入每个大写字母并用空格分隔字符串。我遇到的问题是我的程序拆分了名称(识别大写字母)但从字符串的新输出中排除了大写字母。

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

int main()
{
char name[50], first[25], last[25];
char *pch;
char* key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

// ask user for name
printf("What is your name? ");
scanf("%s", name);

printf("Hello \"%s\" here is your First and Last Name:\n", name);
pch = strtok(name, key);
while (pch != NULL)
{
printf("%s\n", pch);
pch = strtok(NULL, key );
}
return 0;
}

最佳答案

有两个问题:

  1. strtok 的第二个参数应该明确地只是您想要的分隔符字符串。对于您的情况,我认为这只是一个空格 ("")。
  2. scanf 中的 %s 在看到输入中的空格时停止读取。

修改后的程序:

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

int main()
{
char name[50], first[25], last[25];
char *pch;

// ask user for name
printf("What is your name? ");
//scanf("%s", name);
fgets(name, 50, stdin);

printf("Hello \"%s\" here is your First and Last Name:\n", name);
pch = strtok(name, " ");
while (pch != NULL)
{
printf("%s\n", pch);
pch = strtok(NULL, " ");
}
return 0;
}

如果您也想允许 CamelCase 名称,那么 strtok 将无法单独工作,因为它破坏了分隔符。您可以做一些简单的事情,比如预处理名称和插入空格,或者编写自定义分词器。下面是插入空间的思路方法。如果你只是插入空格,那么 strtok 会做你想做的事:

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

void insert_spaces(char *in, char *out)
{
if ( !in || !out )
return;

while ( *in )
{
if (isupper(*in))
*out++ = ' ';

*out++ = *in++;
}

*out = '\0';
}

int main()
{
char in_name[50], first[25], last[25];
char name[100];
char *pch;

// ask user for name
printf("What is your name? ");
//scanf("%s", name);
gets(in_name);

printf("Hello \"%s\" here is your First and Last Name:\n", in_name);

insert_spaces(in_name, name);

pch = strtok(name, " ");

while (pch != NULL)
{
printf("%s\n", pch);
pch = strtok(NULL, " ");
}
return 0;
}

关于c - 用 C 拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com