69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int Search(char* src,char tar);
int main(){
char *p=NULL,m;
int pos,i=0,n;
printf("Please enter array size:");
scanf("%d",&n);
p=(char *)malloc(n+1);
p[n] = '\0';
printf("Please enter a string:");
scanf("%s",p);
fflush(stdin);
do{
printf("请输入要查找的字符:");
scanf("%c",&m);
fflush(stdin);
pos=Search(p,m);
if(pos==-1)
{
printf("给定的字符在字符串中不存在!\n");
}
else
{
printf("pos=%d\n",pos);
}
printf("继续么?\n");
scanf("%c",&m);
fflush(stdin);
}while(m =='y'||m=='Y');
system("pause");
}
int Search(char* src,char tar){
int len = strlen(src);
int i = 0;
for(;i<len;++i){
if(src[i]==tar) return i+1;
}
return -1;
}
#include <stdio.h>
#include <stdlib.h>
char Search(char a[], int n, char m); // 干嘛返回char
main()
{
char *p = NULL, m;
int pos,i = 0, n;
printf("Please enter array size: ");
scanf("%d", &n);
p = (char *)calloc(n, sizeof(char));
if(p == NULL)
{
printf("No enough memory!\n");
exit(0);
}
printf("Please enter a string: ");
scanf("%s", p);
printf("ipnut a char: ");
scanf("%c", &m);
pos = Search(p, n, m);
if(pos = -1) // =?应该是==
{
printf("not found");
}
else
{
printf("pos = %d\n", i);
}
}
char Search(char a[], int n, char m) // 可以返回int
{
int i = 0;
if(a[i] == m) // 只判断一次?用while吧,i也没有++
{
return 0;
}
else
{
return -1;
}
}
#include <stdio.h>
int position(char *str, int c)
{
char *p = str;
while(*p && *p != c)
p++;
if(*p)
return p - str;
else
return -1;
}
int main(void)
{
char buffer[80] = { 0 }, c = 0;
int pos = 0;
printf("Please input a string: ");
scanf("%s", buffer);
scanf("%c", &c);
printf("Please input a char: ");
scanf("%c", &c);
pos = position(buffer, c);
if(pos == -1)
printf("Not found\n");
else
printf("pos = %d\n", pos);
return 0;
}
#include <stdio.h>
#define MAXLINE 1000
int getline(char *line, int lim); //读取一行字符
int findAlpha(char source[], char alpha); //找到字符串中的字母,返回位置
int main()
{
char line[MAXLINE] = {0};
int index = -1;
char c;
printf("Enter a string:");
if (getline(line, MAXLINE) > 0)
{
printf("Enter a alpha:");
c = getchar();
if ((index = findAlpha(line, c)) != -1)
printf("first appear at position of %d.\n", index);
else
printf("No such alpha.\n");
}
system("PAUSE");
return 0;
}
int getline(char *line, int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++)
line[i] = c;
if (c == '\n')
line[i++] = c;
line[i] = '\0';
return i;
}
int findAlpha(char source[], char alpha)
{
int i = 0;
while (source[i] != '\0' && source[i] != alpha)
i++;
if (source[i] == '\0')
return -1;
else
return i + 1;
}
/* checkstring.c
* 问题1、通过C程序,读电脑中写好的一个txt文件,查某一个单词在文中出现过多少次
* 问题2、查另一个单词,输出在文中首次出现的行、列数
*/
#include <stdio.h>
#include <string.h>
int judge_argc(int argc);
long matchstring(char *str,char *substr);
long get_interspace(char *argv1,long *iInterSpace);
long matchposition(char *argv1,char *argv2,long *iInterSpace,long *iMatchX,long *iMatchY);
/* 主函数:通过命令行输入参数,输入格式为:程序可执行文件名 文件名 字符串 */
int main(int argc,char *argv[])
{
long iInterSpace = 0; /* 文件大小(字节数) */
long iMatchX = 0; /* 行数 */
long iMatchY = 0; /* 列数 */
judge_argc(argc); /* 判断参数个数,如果个数不足,退出程序 */
get_interspace(argv[1],&iInterSpace); /* 获取文件大小 */
matchposition(argv[1],argv[2],&iInterSpace,&iMatchX,&iMatchY); /*获取字符串在文件中出现的次数和所在的行、列数 */
return 0;
}
/* 判断命令行参数个数,如果不足,退出程序 */
int judge_argc(int argc)
{
if(argc < 3)
{
printf("Input Error!\nUsage:programmename testfilename teststring\n");
printf("输入错误!\n使用方法:程序可执行文件名 文件名 字符串\n");
exit(2);
}
return 0;
}
/* 获取文件大小,以便之后程序中申请合适的空间 */
long get_interspace(char *argv1,long *iInterSpace)
{
FILE *fp;
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
while(! feof(fp))
{
fgetc(fp);
*iInterSpace = *iInterSpace + 1;
}
fclose(fp);
return 0;
}
/* 判断匹配字符串的个数 */
long matchstring(char *str,char *substr)
{
char *p,*sp;
long iNum = 0;
p = str;
sp = substr;
while(*str != '\0')
{
str = p;
while(*substr != '\0')
{
if(*str == *substr)
{
substr++;
str++;
}
else
{
substr = sp;
str = p;
break;
}
}
if(*substr == '\0')
{
iNum = iNum + 1;
substr = sp;
p = str;
continue;
}
p++;
}
return iNum;
}
/* 判断输出具体的匹配行、列数,最后统计匹配总个数 */
long matchposition(char *argv1,char *argv2,long *iInterSpace,long *iMatchX,long *iMatchY)
{
FILE *fp;
char cString[*iInterSpace + 2]; /* 所有字符 */
char cPerLine[*iInterSpace + 2]; /* 单行字符 */
int ii,jj,kk; /* 临时变量,用来控制循环 */
long iReadNum = 0; /* 实际读取字符个数 */
long iLine = 0; /* 行数 */
long iMatchNum = 0;
long num = 0;
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
/* 初始化缓冲空间,并一次性将数据都读出来 */
memset(cString,'\0',sizeof(cString));
memset(cPerLine,'\0',sizeof(cPerLine));
iReadNum = fread(cString,1,sizeof(cString),fp);
fclose(fp);
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
/* unix、linux下不需要,所以注释掉了.*/
/* (经调试,发现windows下为了获得正确的行数,需要在最后多加一个\n,于是,定义空间的时候多加了2个字符) */
/*
cString[iReadNum] = '\n';
*/
iLine = matchstring(cString,"\n"); /* 获取正确的行数,以便控制之后的读取次数 */
num = matchstring(cString,argv2);
/* 重新打开文件,用fgets读取数据,通过行数控制读取次数 */
for(ii = 0;ii < iLine;ii++)
{
fgets(cPerLine,sizeof(cPerLine),fp);
*iMatchX = ii + 1; /* 获得正确的行数 */
/* 用strstr判断该行中是否有匹配的字符串,有的话,输出行、列数 */
if(strstr(cPerLine,argv2) != NULL)
{
for(jj = 0;jj < strlen(cPerLine);)
{
for(kk = 0;kk < strlen(argv2);kk++)
{
/* 有1个字符不匹配,退出本次循环 */
if(*(cPerLine + jj + kk) != *(argv2 + kk))
{
jj++;
break;
}
}
/* 都匹配时,输出行、列数 */
if(kk == strlen(argv2))
{
iMatchNum = iMatchNum + 1; /* 匹配个数 */
*iMatchY = jj + 1; /* 获得正确的列数 */
printf("%ld matched.\n",num); /* 2 */
printf("First matched position(Line:%ld,Row:%ld)\n",*iMatchX,*iMatchY);
exit(0); /* 1 */
jj++; /* 如果要输出所有的位置,则将1处语句改为break,将2处移到循环外,程序返回前 */
}
}
}
}
fclose(fp);
if(0 == iMatchNum)
{
printf("0 matched.\n");
exit(1);
}
return -1; /* 按照楼主要求改成了返回-1 */
}
/* checkstring.c
* 问题1、通过C程序,读电脑中写好的一个txt文件,查某一个单词在文中出现过多少次
* 问题2、查另一个单词,输出在文中首次出现的行、列数
*/
#include <stdio.h>
#include <string.h>
int judge_argc(int argc);
long matchstring(char *str,char *substr);
long get_interspace(char *argv1,long *iInterSpace);
long matchposition(char *argv1,char *argv2,long *iInterSpace,long *iMatchX,long *iMatchY);
/* 主函数:通过命令行输入参数,输入格式为:程序可执行文件名 文件名 字符串 */
int main(int argc,char *argv[])
{
long iInterSpace = 0; /* 文件大小(字节数) */
long iMatchX = 0; /* 行数 */
long iMatchY = 0; /* 列数 */
judge_argc(argc); /* 判断参数个数,如果个数不足,退出程序 */
get_interspace(argv[1],&iInterSpace); /* 获取文件大小 */
matchposition(argv[1],argv[2],&iInterSpace,&iMatchX,&iMatchY); /*获取字符串在文件中出现的次数和所在的行、列数 */
return 0;
}
/* 判断命令行参数个数,如果不足,退出程序 */
int judge_argc(int argc)
{
if(argc < 3)
{
printf("Input Error!\nUsage:programmename testfilename teststring\n");
printf("输入错误!\n使用方法:程序可执行文件名 文件名 字符串\n");
exit(2);
}
return 0;
}
/* 获取文件大小,以便之后程序中申请合适的空间 */
long get_interspace(char *argv1,long *iInterSpace)
{
FILE *fp;
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
while(! feof(fp))
{
fgetc(fp);
*iInterSpace = *iInterSpace + 1;
}
fclose(fp);
return 0;
}
/* 判断匹配字符串的个数 */
long matchstring(char *str,char *substr)
{
char *p,*sp;
long iNum = 0;
p = str;
sp = substr;
while(*str != '\0')
{
str = p;
while(*substr != '\0')
{
if(*str == *substr)
{
substr++;
str++;
}
else
{
substr = sp;
str = p;
break;
}
}
if(*substr == '\0')
{
iNum = iNum + 1;
substr = sp;
p = str;
continue;
}
p++;
}
return iNum;
}
/* 判断输出具体的匹配行、列数,最后统计匹配总个数 */
long matchposition(char *argv1,char *argv2,long *iInterSpace,long *iMatchX,long *iMatchY)
{
FILE *fp;
char cString[*iInterSpace + 2]; /* 所有字符 */
char cPerLine[*iInterSpace + 2]; /* 单行字符 */
int ii,jj,kk; /* 临时变量,用来控制循环 */
long iReadNum = 0; /* 实际读取字符个数 */
long iLine = 0; /* 行数 */
long iMatchNum = 0;
long num = 0;
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
/* 初始化缓冲空间,并一次性将数据都读出来 */
memset(cString,'\0',sizeof(cString));
memset(cPerLine,'\0',sizeof(cPerLine));
iReadNum = fread(cString,1,sizeof(cString),fp);
fclose(fp);
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
/* unix、linux下不需要,所以注释掉了.*/
/* (经调试,发现windows下为了获得正确的行数,需要在最后多加一个\n,于是,定义空间的时候多加了2个字符) */
/*
cString[iReadNum] = '\n';
*/
iLine = matchstring(cString,"\n"); /* 获取正确的行数,以便控制之后的读取次数 */
num = matchstring(cString,argv2);
/* 重新打开文件,用fgets读取数据,通过行数控制读取次数 */
for(ii = 0;ii < iLine;ii++)
{
fgets(cPerLine,sizeof(cPerLine),fp);
*iMatchX = ii + 1; /* 获得正确的行数 */
/* 用strstr判断该行中是否有匹配的字符串,有的话,输出行、列数 */
if(strstr(cPerLine,argv2) != NULL)
{
for(jj = 0;jj < strlen(cPerLine);)
{
for(kk = 0;kk < strlen(argv2);kk++)
{
/* 有1个字符不匹配,退出本次循环 */
if(*(cPerLine + jj + kk) != *(argv2 + kk))
{
jj++;
break;
}
}
/* 都匹配时,输出行、列数 */
if(kk == strlen(argv2))
{
iMatchNum = iMatchNum + 1; /* 匹配个数 */
*iMatchY = jj + 1; /* 获得正确的列数 */
printf("%ld matched.\n",num); /* 2 */
printf("First matched position(Line:%ld,Row:%ld)\n",*iMatchX,*iMatchY);
exit(0); /* 1 */
jj++; /* 如果要输出所有的位置,则将1处语句改为break,将2处移到循环外,程序返回前 */
}
}
}
}
fclose(fp);
if(0 == iMatchNum)
{
printf("0 matched.\n");
exit(1);
}
return 0;
}