如何将字符数组连接成单个字符串?

How to concatenate array of chars into single string?

我创建了一个输入用户名并输出其首字母的函数。比如"John Doe"应该是JD,"Rick Dixon Lightning"应该是RDL。它甚至应该处理混乱的条目,例如“geoRge 6w bu7sh”,返回 "GWB."

下面这段代码功能完美,但有一个问题:

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

int main(void)
{
    printf("Your name: ");
    string name = GetString();
    int nameLength = strlen(name);

    int initials[nameLength];

    int initialSwitch = 0;

    for (int i = 0; i < nameLength; i++)
    {
        if(initialSwitch%2 == 0 && (int)name[i] != 32 && tolower(name[i]) >= 97 && tolower(name[i])<=122)
        {
            initials[initialSwitch] = (int)name[i];
            initialSwitch++;
        } else if(initialSwitch%2!=0 && (int)name[i] == 32){
            initialSwitch++;
        }
    }

    for (int i = 0; i<initialSwitch; i++)
    {
        printf("%c",toupper(initials[i]));
    }

    printf("\n");
}

底部输出循环单独输出每个首字母,而我需要将首字母输出为单个串联字符串。我已经搜索了互联网并提出了我最好的解决方案,不幸的是它无法正常运行:

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

int main(void)
{
    printf("Your name: ");
    string name = GetString();
    int nameLength = strlen(name);

    char initials[nameLength];

    int initialSwitch = 0;

    for (int i = 0; i < nameLength; i++)
    {
        if(initialSwitch%2 == 0 && (int)name[i] != 32 && tolower(name[i]) >= 97 && tolower(name[i])<=122)
        {
            initials[initialSwitch] = (int)name[i];
            initialSwitch++;
        } else if(initialSwitch%2!=0 && (int)name[i] == 32){
            initialSwitch++;
        }
    }

    initials[initialSwitch]=(int)"[=11=]";

    for (int i = 0; i<initialSwitch; i++)
    {
        printf("%s\n",initials);
    }
}

对于测试输入 "John Bill Doe,",我尝试的解决方案输出 "j\nj\nj\nj\nj\n," 或五个 "j",每个都在自己的行上。

我哪里错了?

编辑:

感谢大家的帮助。总而言之,我犯了以下错误:

  1. 无关的 (int) 声明
  2. 循环打印字符串
  3. 必须创建额外的变量来存储首字母的数量 我已经添加了,因为我的初始开关在我的 首字母数组。这没有出现在我的顶级 "working" 示例中 因为它们是空白的,所以很难调试 意识到错误。

下面的工作代码:

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

int main(void)
{
    printf("Your name: ");
    string name = GetString();
    int nameLength = strlen(name);

    char initials[nameLength];

    int initialSwitch = 0;
    int initialCount = 0;

    for (int i = 0; i < nameLength; i++)
    {
        if(initialSwitch%2 == 0 && name[i] != 32 && tolower(name[i]) >= 97 && tolower(name[i])<=122)
        {
            initials[initialCount] = toupper(name[i]);
            initialSwitch++;
            initialCount++;
        } else if(initialSwitch%2!=0 && name[i] == 32){
            initialSwitch++;
        }
    }

    initials[initialCount]='[=10=]';

        printf("%s\n",initials);

}