0

我被困在我的家庭作业上。不用着急,我有足够的时间来完成这个。我一直在论坛上漫游(看起来像一个论坛,哈哈),并且非常感谢这里的知识和社区意识。我在这里应用了许多技术,这得益于其他回答了这些菜鸟问题的人的恩典。

无论如何,我的任务是编写 ac 程序,该程序将接受一个带有连字符的字符串,并检查字符串的第一组(在连字符之前)是否仅为字母/字母,下一组仅为数字,并且最后一组仅是字母/字母。这个项目很相似:http ://wps.aw.com/wps/media/objects/7257/7431666/Case_Studies/GaddisJavaCSO_CS6.pdf

到目前为止,我坚持将字符串拆分为 3 个变量。我已经阅读了有关 strtok 和操作 scanf 函数的信息,但我没有成功:

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

int main ()
{
char serial [50];
char * part1 = NULL, part2 = NULL, part3 = NULL;
    printf("Enter Serial Number:\n");
    scanf("%s", serial);
 part1 = strtok (serial, "-");

 part2 = strtok(NULL, "-");
 part3 = strtok(NULL, "-");

    printf("You entered %s\n", part1);
    printf("You entered %s\n", part2);
    printf("You entered %s\n", part3);
return 0;
}
4

3 回答 3

1

您使用 strtok 错误,将参数传递给它,它应该可以正常工作。

char * pch = strtok (serial, "-" );
while (pch != NULL)
{
  printf ("%s\n",pch);
  pch = strtok (NULL, "-");
}

或者在您的示例中,您需要将每个定义为 char* :

   char * part1= strtok (serial, "-");
   char * part2 = strtok(NULL, "-");
   char* part3 = strtok(NULL, "-")

StrTok + 示例

于 2013-05-27T20:54:48.020 回答
0
strcpy(part1, strtok(serial, "-"));//premise: string has hyphen
strcpy(part2, strtok(NULL, "-"));
strcpy(part3, strtok(NULL, "-"));
于 2013-05-27T21:24:32.970 回答
0

您可以利用scanf's 格式化规则直接从输入行读取字符串。

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

int main ()
{
    char part1[40], part2[40], part3[40];
    int count, n;
    do{
        n = 0;
        flushall();
        printf("Enter Serial Number:\n");
        count = scanf(" %39[A-Za-z]-%39[0-9]-%39[A-Za-z]%n", part1, part2, part3, &n);
        if( count != 3 || n == 0 ){
            printf("Recognize %i parts, %s\n", count, n == 0 ? "did not parse to the end" : "parsed to the end");
        }
    }while(count != 3 || n == 0);

    printf("You entered %s\n", part1);
    printf("You entered %s\n", part2);
    printf("You entered %s\n", part3);
return 0;
}

这是一种非常严格的输入解析形式,需要用户保留外部形式。您可以通过不使用%s,而是使用类似%[0-9]. 我过滤序列号输入的最佳方法总是正则表达式(如果可用)......但我认为这还不是你作业的一部分:)

于 2013-05-27T23:28:23.637 回答