【问题标题】:Compare argv[1] with first character of string将 argv[1] 与字符串的第一个字符进行比较
【发布时间】:2017-10-20 20:36:36
【问题描述】:

我有带字符串的文件。每个字符串都在新行上。现在我需要比较 argv[1] 是否与任何这些字符串的第一个字符相同。我是 C 新手,我不确定我是否使用了正确的函数

代码如下:

int main(int argc, char *argv[]) {

char character[100][100];
int i = 0;
int result;

while((fgets(character, 100, stdin) != NULL) && (i < 100)){ 
    fputs(character, stdout);   
    if(character[0] == argv[1]){
        printf("Yes");
    }

    result = strcmp(character[0], argv[1]);

    if(result == 0){
        printf("TRUE");

    }
    i++;
}
return 0;   

}

【问题讨论】:

  • 你试过了吗?
  • argv[1] 不是char,而是char *,所以您需要将character[0]argv[1][0] 进行比较。
  • @LeeDanielCrocker 好吧,character 更适合命名为 lines... 这说明问题了吗? [提示 OP:注意名称,它们对于理解代码很重要。]
  • 哎呀,你是对的,这也是一个数组,所以你不能将character传递给fgets,你应该fgets(character[x],...),然后比较character[x][0]和@987654333 @。如果要比较整个字符串,请使用strcmp()
  • @Lee Refgets:反过来,这也是真的。

标签: c string argv strcmp


【解决方案1】:

函数fgets 需要char * 类型的参数,而character 的参数类型为char ( * )[100]

您必须使用character[i] 作为参数。

还有这个比较

 if(character[0] == argv[1]){

是错误的,因为比较中的两个操作数都被转换为指向它们的第一个字符的指针,并且这些指针被比较而不是比较指针所指向的字符。

至少你应该写

 if( *character[0] == *argv[1]){

如果你需要在文件中找到第一个字符等于argv[1]的第一个字符的第一条记录,那么while语句应该是这样的(尽管在这种情况下不需要声明一个两个-维数组)

char *p = NULL;
while( ( i < 100 ) && ( ( p = fgets(character[i], 100, stdin) ) != NULL) && ( *p != *argv[1] ) ) ++i; 

if ( i != 100 && p != NULL ) 
{
        printf("Yes");

        result = strcmp( p, argv[1]);

        if(result == 0) printf("TRUE");

}

【讨论】:

  • 你真的应该解释一下。对于 OP 来说,这可能太微妙了。
  • 我不确定是否需要 strcmp。 OP 的任务似乎只是比较第一个字母。
  • 我删除了我的评论;它指的是 strcmp 并且在您使用 &amp;&amp; p != NULL 更正代码之前是正确的;-)。
  • 另外,从fgets 有一个固定大小的数组时,100 可能是一个任意限制,为了更清晰的代码和更好的通用性应该被忽略。
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多