c++题 编写一个函数,int find(char s[ ],char t[ ]) 干函数在字符串s中查找字符串t
若找到t,字符串t在字符串s中的位置(整数值)否则返回-1(用数组和两重循环来实现该函数)仅需在find的花括号中添加若干语句。#include<iostream.h>#...
若找到t,字符串t在字符串s中的位置(整数值)否则返回-1(用数组和两重循环来实现该函数) 仅需在find的花括号中添加若干语句。
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string>
int find(char s[ ], char t[ ]) ;
void wriDat() ;
const int MAXLINE = 256;
int main( )
{
char source[MAXLINE], target[MAXLINE];
cout << "Please input a string for searching:\n";
cin.getline(source, MAXLINE);
cout << "Please input a string you want to find:\n";
cin.getline(target, MAXLINE);
int intPos = find(source, target);
if(intPos >= 0)
cout << "Finding it. The target string is at index " << intPos << " of the source string \n";
else
cout << "Not finding it.\n";
wriDat() ;
return 0;
}
int find(char s[ ], char t[ ])
{
}
/* 读取数据文件并写结果文件, 考生无需修改, 否则后果自负 */
void wriDat()
{
fstream rFile, wFile ;
char source[MAXLINE], target[MAXLINE], i = 0 ;
rFile.open("K:\\K016\\61001622\\in.dat", ios::nocreate | ios::in) ;
if(!rFile) {
cout << "在考生文件夹下数据文件in.dat不存在" << endl ;
return ;
}
wFile.open("K:\\K016\\61001622\\out.dat", ios::out) ;
while (!rFile.eof() && i < 3) {
rFile.getline(source, MAXLINE) ;
rFile.getline(target, MAXLINE) ;
int intPos = find(source, target) ;
if(intPos >= 0)
wFile << "Finding it. The target string is at index " << intPos << " of the source string.\n" ;
else
wFile << "Not finding it.\n" ;
i++ ;
}
rFile.close() ;
wFile.close() ;
} 展开
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string>
int find(char s[ ], char t[ ]) ;
void wriDat() ;
const int MAXLINE = 256;
int main( )
{
char source[MAXLINE], target[MAXLINE];
cout << "Please input a string for searching:\n";
cin.getline(source, MAXLINE);
cout << "Please input a string you want to find:\n";
cin.getline(target, MAXLINE);
int intPos = find(source, target);
if(intPos >= 0)
cout << "Finding it. The target string is at index " << intPos << " of the source string \n";
else
cout << "Not finding it.\n";
wriDat() ;
return 0;
}
int find(char s[ ], char t[ ])
{
}
/* 读取数据文件并写结果文件, 考生无需修改, 否则后果自负 */
void wriDat()
{
fstream rFile, wFile ;
char source[MAXLINE], target[MAXLINE], i = 0 ;
rFile.open("K:\\K016\\61001622\\in.dat", ios::nocreate | ios::in) ;
if(!rFile) {
cout << "在考生文件夹下数据文件in.dat不存在" << endl ;
return ;
}
wFile.open("K:\\K016\\61001622\\out.dat", ios::out) ;
while (!rFile.eof() && i < 3) {
rFile.getline(source, MAXLINE) ;
rFile.getline(target, MAXLINE) ;
int intPos = find(source, target) ;
if(intPos >= 0)
wFile << "Finding it. The target string is at index " << intPos << " of the source string.\n" ;
else
wFile << "Not finding it.\n" ;
i++ ;
}
rFile.close() ;
wFile.close() ;
} 展开
3个回答
展开全部
1楼老弟,看清题目要求
int find(char s[ ], char t[ ])
{
int nret = -1;
size_t len1 = strlen(s);
size_t len2 = strlen(t);
if (len1 == 0
|| len2 == 0
|| len2 > len1)
{
return nret;
}
for (int i=0;i<=len1-len2;i++)
{
if (s[i]==t[0])
{
if (len2 == 1)
{
return i;
}
for (int k=1;k<len2;k++)
{
if ( s[i+k] != t[k])
{
break;
}
if (k == len2 - 1)
{
return i;
}
}
}
}
return nret;
}
经过测试,这个方法比楼上的方法安全(预防了空指针),且运行时间短(约为楼上方法运行时间的1/3).
int find(char s[ ], char t[ ])
{
int nret = -1;
size_t len1 = strlen(s);
size_t len2 = strlen(t);
if (len1 == 0
|| len2 == 0
|| len2 > len1)
{
return nret;
}
for (int i=0;i<=len1-len2;i++)
{
if (s[i]==t[0])
{
if (len2 == 1)
{
return i;
}
for (int k=1;k<len2;k++)
{
if ( s[i+k] != t[k])
{
break;
}
if (k == len2 - 1)
{
return i;
}
}
}
}
return nret;
}
经过测试,这个方法比楼上的方法安全(预防了空指针),且运行时间短(约为楼上方法运行时间的1/3).
参考资料: 软宝工作室 旺旺ID:zy102600
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-09-11
展开全部
int find(char s[], char t[])
{
int slen = 0, tlen = 0;
// 计算s ,t 的长度
while(s[slen] != '\0') slen++;
while(t[tlen] != '\0') tlen++;
// 如果允许用 strlen(); 的话 直接用strlen();
int pos = -1;
for(int i=0,j=0; i<=slen-tlen; i++)
{
for(j=0; j<tlen; j++)
{
if(s[i+j] != t[j])
break;
}
if(j == tlen)
pos = i;
}
return pos;
}
{
int slen = 0, tlen = 0;
// 计算s ,t 的长度
while(s[slen] != '\0') slen++;
while(t[tlen] != '\0') tlen++;
// 如果允许用 strlen(); 的话 直接用strlen();
int pos = -1;
for(int i=0,j=0; i<=slen-tlen; i++)
{
for(j=0; j<tlen; j++)
{
if(s[i+j] != t[j])
break;
}
if(j == tlen)
pos = i;
}
return pos;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char* p=strstr(s,t);
if(NULL==p)return -1;
else return(p-s);
if(NULL==p)return -1;
else return(p-s);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询