解析字符串时,第一次迭代后第一个字母丢失

恶魔斑马

我的C程序假设接收一个全名,以逗号分隔。示例输出如下:

Enter input string:
Jill, Allen

First word: Jill

Second word: Allen

Enter input string:
Golden , Monkey

First word: Golden

Second word: Monkey

Enter input string:
Washington,DC

First word: Washington

Second word: DC

Enter input string:
q*

但是,使用我当前的代码,Jill, Allen可以按预期工作,但是其他两个名称不能正常工作,因为缺少第一个字母。我认为这是由于输入格式引起的。每个名称都用新行分隔,因此机器不会读取终止行,因此会忽略第一个字母。这是我的代码现在输出时的样子:

Enter input string:
Jill, Allen

First word: Jill

Second word: Allen

Enter input string:
Golden , Monkey

First word: olden

Second word: ,

Enter input string:
Washington,DC

First word: ashington

Second word: ,

如您所见,第一个单词的第一个字母丢失了,然后弄乱了第二个单词任何建议,将不胜感激谢谢。我的代码:

#include<stdio.h>
#include <string.h>

int main(void) {

   char name[100];
   char firstName[100];
   char lastName[100];
   char comma = ',';
   char quit; 
   int i;

   while(quit != 'q')
   {
      printf("Enter input string:\n");
      fgets(name, 100, stdin);
      scanf("%c", &quit);

         if(!(strchr(name, comma)))
         {
            printf("Error: No comma in string.\n\n");
         }

            if((strchr(name, comma)))
            {
               sscanf(name, "%s%s", firstName, lastName);
               for(i = 0; i < strlen(name); i++)
               {

                  if(firstName[i] == ',')
                  {
                     firstName[i] = '\0';
                  }
               }
               printf("First word: %.10s\n", firstName);
               printf("Second word: %.10s\n\n", lastName);
            }

   } 

   printf("Enter input string:\n");

   return 0;
}
萨马拉斯

由于要在用户键入“ q”时停止,因此应检查读取的内容fgets(),如果该值等于字符串“ q”,则中断循环。

所以现在,您将不会读入name,而是读入line因为您正在阅读的内容可以有效地是名称或退出命令。

此外,这意味着您可以使用“无限期”运行(停止条件为1)直到用户输入“ q”的do-while循环,而不是while循环。

此外,您不需要结尾的换行符fgets(),因此可以将其删除

正如@weatherVane所评论的那样:sscanf(name, "%s%s", firstName, lastName);不会停在您检测到的逗号处:每个部分都停在一个空白字符处。

但是,您需要忽略空格字符(如果有的话),因此sscanf()可以在调用之后不运行for循环,而无需使用该方法,而是使用两个循环,一个循环填充第一个名称,然后另一个循环填充以姓氏命名。

将所有内容放在一起,您将获得:

#include<stdio.h>
#include <string.h>

int main(void)
{
   char line[100];
   char firstName[100];
   char lastName[100];
   char comma = ',';
   do {
      printf("Enter input string:\n");
      fgets(line, 100, stdin);
      line[strcspn(line, "\n")] = 0;
      if(!strcmp(line, "q"))
      {
        printf("Exiting..\n");
        break;
      }
      if(!(strchr(line, comma)))
      {
        printf("Error: No comma in string.\n\n");
      }
      if((strchr(line, comma)))
      {
        int i = 0, j = 0; // i'' index for line, 'j' index for 'firstName'
        while(line[i] != ',')
        {
          if(line[i] != ' ')
          {
            firstName[j] = line[i];
            j++;
          }
          i++;
        }
        i++; // since we had stopped at the comma character
        firstName[j] = '\0';
        int k = 0; // 'k' index for 'lastName'
        while(line[i] != '\0')
        {
          if(line[i] != ' ')
          {
            lastName[k] = line[i];
            k++;
          }
          i++;
        }
        lastName[k] = '\0';
        printf("First word: %.10s\n", firstName);
        printf("Second word: %.10s\n\n", lastName);
      }
   } while(1);
   return 0;
}

输出:

Enter input string:
Jill, Allen
First word: Jill
Second word: Allen

Enter input string:
Golden , Monkey
First word: Golden
Second word: Monkey

Enter input string:
Washington,DC
First word: Washington
Second word: DC

Enter input string:
q
Exiting..

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在字符第一次(也是第一次)出现后将字符串插入到另一个字符串中

来自分类Dev

PowerShell在第一次出现子字符串/字符时拆分了一个字符串

来自分类Dev

如何在一个字符的第一次出现和另一个字符的第一次出现之间提取字符串?

来自分类Dev

使用递归获取第一个字符串中第二个字符串的第一次出现的索引

来自分类Dev

将字符串的第一个单词更改为第一个字母

来自分类Dev

在作为字母的字符串中查找第一个字符

来自分类Dev

拆分字符串后,如何让 charAt() 检查每个第一个字母?

来自分类Dev

大写字符串的第一个字母

来自分类Dev

在AngularJs中大写字符串的第一个字母

来自分类Dev

如何使用jQuery从字符串中获取第一个字母

来自分类Dev

Django获取字符串的第一个字母

来自分类Dev

查找字符串中的第一个字母-Javascript

来自分类Dev

从列中获取字符串的第一个字母

来自分类Dev

如何检查字符串中的第一个字母是数字

来自分类Dev

Xpath:紧随元素之后的第一个字母/字符串

来自分类Dev

在JavaScript中使用字符串的RegEx的第一个字母

来自分类Dev

PowerShell仅打印字符串的第一个字母

来自分类Dev

在TextBox的上方将字符串的第一个字母

来自分类Dev

匹配Tcl中字符串的第一个字母

来自分类Dev

C中字符串的第一个字母

来自分类Dev

cmd:从字符串中查找第一个字母

来自分类Dev

将第一个字母添加到字符串

来自分类Dev

从第一个字母中提取子字符串

来自分类Dev

仅显示每个单词的字符串的第一个字母

来自分类Dev

字符串查找方法找不到第一个字母

来自分类Dev

PHP:如何在第一次出现另一个字符串之前添加子字符串?

来自分类Dev

如何从一个字符串的第一次出现开始从一个大文件中提取文本?

来自分类Dev

如何在第一个字符后屏蔽字符串

来自分类Dev

查找给定字符串后的第一个字符

Related 相关文章

  1. 1

    如何在字符第一次(也是第一次)出现后将字符串插入到另一个字符串中

  2. 2

    PowerShell在第一次出现子字符串/字符时拆分了一个字符串

  3. 3

    如何在一个字符的第一次出现和另一个字符的第一次出现之间提取字符串?

  4. 4

    使用递归获取第一个字符串中第二个字符串的第一次出现的索引

  5. 5

    将字符串的第一个单词更改为第一个字母

  6. 6

    在作为字母的字符串中查找第一个字符

  7. 7

    拆分字符串后,如何让 charAt() 检查每个第一个字母?

  8. 8

    大写字符串的第一个字母

  9. 9

    在AngularJs中大写字符串的第一个字母

  10. 10

    如何使用jQuery从字符串中获取第一个字母

  11. 11

    Django获取字符串的第一个字母

  12. 12

    查找字符串中的第一个字母-Javascript

  13. 13

    从列中获取字符串的第一个字母

  14. 14

    如何检查字符串中的第一个字母是数字

  15. 15

    Xpath:紧随元素之后的第一个字母/字符串

  16. 16

    在JavaScript中使用字符串的RegEx的第一个字母

  17. 17

    PowerShell仅打印字符串的第一个字母

  18. 18

    在TextBox的上方将字符串的第一个字母

  19. 19

    匹配Tcl中字符串的第一个字母

  20. 20

    C中字符串的第一个字母

  21. 21

    cmd:从字符串中查找第一个字母

  22. 22

    将第一个字母添加到字符串

  23. 23

    从第一个字母中提取子字符串

  24. 24

    仅显示每个单词的字符串的第一个字母

  25. 25

    字符串查找方法找不到第一个字母

  26. 26

    PHP:如何在第一次出现另一个字符串之前添加子字符串?

  27. 27

    如何从一个字符串的第一次出现开始从一个大文件中提取文本?

  28. 28

    如何在第一个字符后屏蔽字符串

  29. 29

    查找给定字符串后的第一个字符

热门标签

归档