请问下C语言如何从一个输入的字符串中取出第一个字母并且输出?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问下C语言如何从一个输入的字符串中取出第一个字母并且输出?相关的知识,希望对你有一定的参考价值。
比如我在程序框里面输入了一串字幕我要取其中的第一个字母并且输出,请问怎样才能做到?
谢谢
gets(a);
printf("%s",a[0]);本回答被提问者和网友采纳
如何从C字符串中取出第一个字母?
【中文标题】如何从C字符串中取出第一个字母?【英文标题】:How to take first letter from C string? 【发布时间】:2013-10-29 11:45:29 【问题描述】:我想从我的 firstname 字符串变量中取出第一个字母并将它添加到 lastname 变量的第二个字母。
到目前为止我的程序是:
#include <stdio.h>
main()
char firstname [256];
char lastname [256];
printf("What's your first name?: ");
scanf("%c",&firstname);
printf("What is your last name? ");
scanf("%s",&lastname);
printf("\nYour school.edu e-mail address is: %c%s2@school.edu",firstname,lastname);
return 0;
但是,我希望我的代码采用第一个首字母(名字的第一个字母)并将其存储到 firstname 变量中。
【问题讨论】:
您是否在访问数组元素或覆盖现有数组时遇到问题? 当您只对第一个字符感兴趣并存储第一个字符时,为什么还要有一个包含 256 个字符的数组? 请张贴预期的输入和预期的输出。 【参考方案1】:由于字符串是字符数组,所以需要从数组中取出第一个元素:
char firstname_initial;
firstname_initial = firstname[0]
还要注意,由于lastname
和firstname
是缓冲区,因此您不需要在scanf
中传递指向它们的指针:
scanf( "%s", firstname );
scanf( "%s", lastname );
最后一件事 - scanf
是一个危险的功能,你不应该使用它。
【讨论】:
现在我得到错误:下标值既不是数组也不是指针 摆脱了错误。但是现在当我输入名字时,它只是进入 firstname2@school.edu 甚至没有要求我扫描第二个名字,它不需要任何首字母【参考方案2】:假设用户类型:
Michael
响应第一个提示。 %c
格式读取为M
; %s
格式读取 ichael
无需费心获取任何新数据。
另外,您不应该传递&firstname
或&lastname
;你应该只将firstname
和lastname
传递给scanf()
。区别在于类型;使用与号,您传递的 char (*)[256]
与 scanf()
所期望的 char *
不同。你可以逍遥法外,但“逍遥法外”是有效术语。
对两个scanf()
调用使用%s
格式(或者,更好的是%255s
格式)。然后将firstname[0]
和lastname
传递给printf()
。您可能想考虑在第一个字母上使用<ctype.h>
中的tolower()
,也可以在姓氏上使用。
这是一个好的程序的合理近似:
#include <stdio.h>
int main(void)
char firstname[256];
char lastname[256];
printf("What's your first name? ");
if (scanf("%255s", firstname) != 1)
return 1;
printf("What's your last name? ");
if (scanf("%255s", lastname) != 1)
return 1;
printf("Your school.edu e-mail address is: %c%s2@school.edu\n",
firstname[0], lastname);
return 0;
它以一种或另一种方式避免了很多问题。它并非完全万无一失,但大多数人不会遇到问题。
【讨论】:
【参考方案3】:#include <stdio.h>
#include<string.h>
main()
char firstname [256];
char lastname [256];
char str [50];
printf("What's your first name?: ");
scanf("%s",firstname);
printf("What is your last name? ");
scanf("%s",lastname);
str = strcpy(str, firstname[0]);
str = strcpy(str,lastname[1]);
printf("\nYour school.edu e-mail address is: %s2@school.edu",str);
return 0;
【讨论】:
你有各种各样的问题。你不能像strcpy()
那样复制firstname[0]
。你也不能用lastname[1]
来做,而且你可能也不想做(lastname
或&lastname[0]
代替)。您为复合名称分配了 50 个字节,但为姓氏分配了 256 个字节;这可能会导致崩溃。【参考方案4】:
我认为您希望变量 firstname 仅存储首字母。 这样 firstname 就像字符串一样。
firstname[1] = '\0'; //mark the end of string on second character
printf("\nYour school.edu e-mail address is: %s%s2@school.edu",firstname,lastname);
【讨论】:
【参考方案5】:假设预期输入:
fname = Batman
lname = Joker
预期输出:
Your school.edu e-mail address is: BJBker2@school.edu
试试这个:
void main( void )
char fname = 0;
char lname[256] = 0;
printf("Enter firstname\n");
scanf("%c", &fname);
printf("Enter lastname\n");
scanf("%s", lname);
lname[1] = fname;
printf("Your school.edu e-mail address is: %c%s2@school.edu\n", fname, lname);
return;
【讨论】:
【参考方案6】:从 c 字符串复制第一个字符
char extractedchar = '0';
extractedchar=myoldstring[0];
注意:char '0' 只是为了稍后在应用程序中测试
【讨论】:
以上是关于请问下C语言如何从一个输入的字符串中取出第一个字母并且输出?的主要内容,如果未能解决你的问题,请参考以下文章