我被困在家庭作业上。没有急,我有足够的时间来完成这个。我一直在论坛漫游(看起来像一个论坛大声笑),并非常感谢这里的知识和社区意识。我已经从其他人的恩典中应用了许多技巧,他们回答了这些noob问题。
无论如何,我的任务是编写一个带有字符串的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;
}
答案 0 :(得分: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, "-")
答案 1 :(得分:0)
strcpy(part1, strtok(serial, "-"));//premise: string has hyphen
strcpy(part2, strtok(NULL, "-"));
strcpy(part3, strtok(NULL, "-"));
答案 2 :(得分:0)
您可以使用scanf
的格式规则直接从输入行读取字符串。
#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]
之类的内容。对我来说,过滤序列号输入的最好方法是Regex(如果可用的话)......但我不认为这是你作业的一部分:)