0

对于我的任务,我需要执行以下操作

  • 要求用户输入他们的名字并将其保存到字符数组中
  • 然后我需要输出所述用户输入的字符数
  • 然后我必须倒着拼写那个用户的名字
  • 然后告诉用户字符数组的哪一部分包含他们的名字和姓氏之间的空格
  • 我需要做但不能安静地弄清楚(实际上我完全迷失了)的最后一件事是先输出用户的姓氏,然后是名字最后(即 John Doe = Doe John);

    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
    printf("Enter your name\n");
    
    char name [25]={'\0'};
    char * pch;
    
    fgets(name,sizeof(name),stdin); 
    
    printf("You Entered: %s     \n", name);
    
    printf("There are %u characters in your name including the space. \n", strlen(name));
    
    char end;
    int i;
    end = strlen(name) -1;
    printf("Your name backwards is");
    for (i = end; i >= 0; --i)
    {
    printf("%c", name [i]);
    }
    
    printf("\nLooking for the space in your name \n", name);
    pch=strchr(name, ' ');
    while (pch!=NULL)
    {
        printf("Space found at %d\n", pch-name+1);
        pch=strchr(pch+1, ' ');
    }
    
    
    }
    

任何知道如何做到这一点的人,你能解释一下你做了什么,以便我可以向你学习吗?

4

4 回答 4

1

我需要做但不能安静地弄清楚(实际上我完全迷失了)的最后一件事是先输出用户的姓氏,然后是名字的最后(即 John Doe = Doe John);

如何反转数组中字符串的顺序是常见的分配/面试问题。一个优雅但可能不是最有效的算法是:

step 1: reverse the array character by character 
step 2: reverse each string in-place

在此处查看答案以获取更多信息。

于 2013-09-27T15:19:29.143 回答
1

既然你找到了空间,就用一个'\0'字符覆盖它,把字符串切成两半:

*pch = '\0';

然后首先打印空格所在的字符串,然后打印整个字符串:

printf("last name: %s\n", pch + 1);
printf("first name: %s\n", name);

如果有多个空格,这会有所破坏,但你明白了。

于 2013-09-27T15:14:43.363 回答
1

您知道空间出现的索引(pch此处)。如果您按字符迭代字符串,则打印pch+1end然后从0到。pch

于 2013-09-27T15:16:04.863 回答
1

您已经在倒数第二个问题中找到了名称中空格所在的位置。只需将空格替换为\0. 然后 printf 两个字符串:

*pch = '\0';
printf("%s %s\n",pch + 1,name);
于 2013-09-27T15:17:04.397 回答