如何从C字符串中取出第一个字母?
Posted
技术标签:
【中文标题】如何从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字符串中取出第一个字母?的主要内容,如果未能解决你的问题,请参考以下文章
7.$a = 'abcdef'; 请取出$a的值并打印出第一个字母
PHP 如何使用php - substr()从字符串中删除第一个字母