假设我有一个存储为 char[] 的街道地址。有效值示例:
- 1600 宾夕法尼亚大道
- 1 个无限循环
- 贝克街 221 号
如您所见,门牌号可以是任意长度。
在 C 语言中,将门牌号分离为它自己的 int 的有效方法是什么?我想我需要编写一个 while 循环来检查每个字符 c if isdigit(c),但我不知道我在实现方面是否走在正确的轨道上。
最佳答案
您可以使用 strtok 将字符串分解为标记并使用 isdigit() 来确定该标记是否为数字。
#include <string.h>
#include <stdio.h>
int main()
{
const char str1[80] = "1600 Pennsylvania Ave";
int houseNumber = 0;
const char s[2] = " ";
char *token;
/* get the first token */
token = strtok(str, s);
/* walk through other tokens */
while( token != NULL ) {
printf( " %s\n", token );
if (isdigit(str1[0])) {
houseNumber = atoi (token);
}
token = strtok(NULL, s);
}
return(0);
}
或者,您可以使用 sscanf 读取整个字符串并自动解析所有内容:
#include <string.h>
#include <stdio.h>
int main()
{
const char str1[80] = "1600 Pennsylvania Ave";
int houseNumber = 0;
char streetName[50];
char streetExt[20];
sscanf (str1,"%d %s %s", &houseNumber, streetName, streetExt);
return(0);
}
最后一种方法取决于字符串的格式在所有情况下都完全相同,这意味着它始终是一个数字后跟 2 个字符串。如果有更多其他内容,strtok 方法将更具容错性。
关于c - 从表示为 char[] 的街道地址解析门牌号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29641055/