我正在尝试创建一个数据结构:
typedef struct node_ {
char* fName;
char* lName;
char* origin;
char* destination;
int seatNumber;
struct node_* next;
} Seat;
通过从.txt文档逐行扫描。来源是文档的名称,例如chicago.txt。
我刚刚向我的函数发送了argv[I](同样是文件名,例如chicago.txt)作为原点。这是有效的,但是。。。
现在我需要检查来源是否是目的地,但目的地的格式不是.txt。(例如,chicago.txt!=chicago)。我考虑过在前3个字母左右使用strncmp,但这似乎不是一个好的解决方案。在将argv[]发送到有问题的函数之前,有没有一种简单的方法可以将其修改为不包含.txt?或者有没有更好的方法来解决我没有考虑过的问题?
不要尝试更改传递的参数。首先将它们复制到局部变量中。此示例从提供的参数中删除.txt扩展名。
#include <stdio.h>
#include <string.h>
char fname [100];
int main (int argc, char *argv[]) {
char *xptr;
if (argc < 2) return 1;
strncpy (fname, argv[1], 99);
strlwr (fname);
xptr = strstr (fname, ".txt");
strncpy (fname, argv[1], 99); // copy arg again to restore orig case
if (xptr != NULL)
*xptr = 0; // truncate string
printf ("%sn", fname);
return 0;
}
您不需要(也不应该)修改任何内容,只需检查您关心的字符就可以了,如下所示:
假定str1
是具有.
的字符串,str2
是我们想要比较的字符串:
int result = 0; // will be 1 if same
char *found;
found = strchr(str1,'.');
if (found)
{
if (strncmp(str1,str2,found-str1) == 0)
result = 1;
}
注意,我没有测试,所以您可能需要在表达式found-str1
中添加1
工作原理:在C中,您可以进行指针运算strchr找到.
的位置,然后我们计算出字符串与strncmp的比较长度。