请教C语言字符串和字符数组的比较问题
用C语言读取1.txt文本文件:文件内容如下:123456789098741程序如下:#include<stdio.h>#include<string.h>#includ...
用C语言读取1.txt文本文件:
文件内容如下:
12345
67890
98741
程序如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = fopen("1.txt","r");
char *s="12345";
char buff[500];
while(fgets(buff,499,fp) != NULL)
{
if(strcmp(buff,s)==0) //为什么这里与“12345”比较没有等于0的时候呢
printf("%s",buff);
}
fclose(fp);
system("pause");
return 0;
}
//结果没有输出,应该怎么使用strcmp函数呢? 展开
文件内容如下:
12345
67890
98741
程序如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = fopen("1.txt","r");
char *s="12345";
char buff[500];
while(fgets(buff,499,fp) != NULL)
{
if(strcmp(buff,s)==0) //为什么这里与“12345”比较没有等于0的时候呢
printf("%s",buff);
}
fclose(fp);
system("pause");
return 0;
}
//结果没有输出,应该怎么使用strcmp函数呢? 展开
4个回答
展开全部
c语言的字符数组有两种,比较方式也有所不同。
1
字符串。
c语言的字符串是用字符数组表示的。约定以'\0'(ascii码0)作为结尾标记。
对于字符串类的字符数组,可以用string.h中的strcmp函数进行比较。
int
strcmp(char
*str1,
char
*str2);
其比较规则为:
a,
从左向右依次比较每个元素;
b,
如果出现str1的元素ascii码比较大,则返回1;如果出现str2元素ascii码比较大,则返回-1。如果相等,则继续。
c,
如果一直相等,直到遇到\0,这时检查是否均为\0,如果均为\0,那么返回0;
d,
如果str1到\0,而str2没到,返回-1;
否则返回1。
总结规则就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。
2
不带\0结束的字符数组。
对于此类数组,没有库函数可供使用,只能自己写函数进行比较。规则可以仿照strcmp的规则。
由于没有\0作为结束,所以参数中必须传入每个数组的元素个数。
int char_array_cmp(char *s1, int l1, char *s2, int l2)
{
int lmin = l1>l2? l2:l1; //较小长度者。
int i;
for(i = 0; i < lmin; i ++)
if(s1[i] > s2[i]) return 1;
else if(s1[i] < s2[i]) return -1;
//运行到这里,表示所有已判断元素均相等。
if(l1 == l2) return 0;
if(l1 > l2) return 1;
return -1;//l1 < l2的情况。
}
1
字符串。
c语言的字符串是用字符数组表示的。约定以'\0'(ascii码0)作为结尾标记。
对于字符串类的字符数组,可以用string.h中的strcmp函数进行比较。
int
strcmp(char
*str1,
char
*str2);
其比较规则为:
a,
从左向右依次比较每个元素;
b,
如果出现str1的元素ascii码比较大,则返回1;如果出现str2元素ascii码比较大,则返回-1。如果相等,则继续。
c,
如果一直相等,直到遇到\0,这时检查是否均为\0,如果均为\0,那么返回0;
d,
如果str1到\0,而str2没到,返回-1;
否则返回1。
总结规则就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。
2
不带\0结束的字符数组。
对于此类数组,没有库函数可供使用,只能自己写函数进行比较。规则可以仿照strcmp的规则。
由于没有\0作为结束,所以参数中必须传入每个数组的元素个数。
int char_array_cmp(char *s1, int l1, char *s2, int l2)
{
int lmin = l1>l2? l2:l1; //较小长度者。
int i;
for(i = 0; i < lmin; i ++)
if(s1[i] > s2[i]) return 1;
else if(s1[i] < s2[i]) return -1;
//运行到这里,表示所有已判断元素均相等。
if(l1 == l2) return 0;
if(l1 > l2) return 1;
return -1;//l1 < l2的情况。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = fopen("1.txt","r");
char s[]="12345";
char buff[500];
while(fscanf(fp,"%s",buff),!feof(fp))
{
if(strcmp(buff,s)==0) //为什么这里与"12345"比较没有等于0的时候 呢
printf("%s",buff);
}
fclose(fp);
system("pause");
return 0;
}
上面的代码更靠谱
你用过用fgets 那么处理的字符串后面一直要加'\0'
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = fopen("1.txt","r");
char s[]="12345";
char buff[500];
while(fscanf(fp,"%s",buff),!feof(fp))
{
if(strcmp(buff,s)==0) //为什么这里与"12345"比较没有等于0的时候 呢
printf("%s",buff);
}
fclose(fp);
system("pause");
return 0;
}
上面的代码更靠谱
你用过用fgets 那么处理的字符串后面一直要加'\0'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fgets()到BUFF后,没有\0结束标记
追问
那应该如何比较从文件中读取的字符串呢,我想找到指定的字符串,并进行修改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询