如何从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]

还要注意,由于lastnamefirstname 是缓冲区,因此您不需要在scanf 中传递指向它们的指针:

scanf( "%s", firstname );
scanf( "%s", lastname );

最后一件事 - scanf 是一个危险的功能,你不应该使用它。

【讨论】:

现在我得到错误:下标值既不是数组也不是指针 摆脱了错误。但是现在当我输入名字时,它只是进入 firstname2@school.edu 甚至没有要求我扫描第二个名字,它不需要任何首字母【参考方案2】:

假设用户类型:

Michael

响应第一个提示。 %c 格式读取为M%s 格式读取 ichael 无需费心获取任何新数据。

另外,您不应该传递&amp;firstname&amp;lastname;你应该只将firstnamelastname 传递给scanf()。区别在于类型;使用与号,您传递的 char (*)[256]scanf() 所期望的 char * 不同。你可以逍遥法外,但“逍遥法外”是有效术语。

对两个scanf() 调用使用%s 格式(或者,更好的是%255s 格式)。然后将firstname[0]lastname 传递给printf()。您可能想考虑在第一个字母上使用&lt;ctype.h&gt; 中的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&amp;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的值并打印出第一个字母

Java 取出字符串中第一个重复出现的字母

PHP 如何使用php - substr()从字符串中删除第一个字母

如何验证文本框只允许 c#.net 中的第一个字符大写字母?

SQL取出从某字符开始的N个字符的字符串

python中如何取出字符串中最后一个特定字符后的字符串