对于我的任务,我需要做以下
我需要做的最后一件事但却无法安静地弄清楚(实际上我已经完全失去了)输出用户的姓氏,然后输出姓氏(即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, ' ');
}
}
任何知道如何做的人你能解释一下你做了什么,这样我可以向你学习吗?
答案 0 :(得分:1)
由于你找到了空格,用一个'\0'
字符覆盖它,将字符串切成两半:
*pch = '\0';
然后首先打印空格所在的字符串,然后是整个字符串:
printf("last name: %s\n", pch + 1);
printf("first name: %s\n", name);
如果有多个空格,这会有所突破,但你明白了。
答案 1 :(得分:1)
您知道空格所在的索引(pch
此处)。如果您逐个字符地迭代,请将pch+1
打印到end
,然后从0
打印到pch
。
答案 2 :(得分:1)
您已经找到名称中的空格位于倒数第二个问题的位置。只需用\0
替换空格即可。然后printf两个字符串:
*pch = '\0';
printf("%s %s\n",pch + 1,name);
答案 3 :(得分:1)
我需要做的最后一件事却无法安静地解决(实际上 我完全丢失了,先输出用户的姓氏 名字最后(即John Doe = Doe John);
如何反转数组中字符串的常见任务/面试问题。优雅虽然可能不是最有效的算法:
step 1: reverse the array character by character
step 2: reverse each string in-place
查看答案here了解详情。