小女子的处女贴,一定要告诉我这道题目怎么做啊!
题目是:
编写一个程序来接受两个字符串。程序应判断第一个字符串是否出现在第二个字符串的末尾。
麻烦哪位知道的同志编写了发上来。谢谢了..
问题点数:40、回复次数:73Top
1 楼suki365(″伊雯、)回复于 2005-08-03 20:16:55 得分 0
快来人教我做吖~`` 急死了。Top
2 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-03 20:19:57 得分 0
肯定又是个人妖,偶从没见过一个真MM会叫什么“处女贴”、喊什么“同志”的,唉,楼主连扮鬼都不象...Top
3 楼llf_hust()回复于 2005-08-03 20:30:39 得分 0
int Index(char s[],char t[],int pos)
{
int slen,tlen,i,j;
i = pos;
j = 0;
slen = strlen(s);
tlen = strlen(t);
while (i <slen && j <tlen)
{
if (s[i] == t[j])
{
i++;
j++;
}
else
{
i = i-j+1;
j = 0;
}
}
if(j >= tlen)
return i-tlen;
return -1;
}
Top
4 楼suki365(″伊雯、)回复于 2005-08-03 20:35:32 得分 0
你才是人妖,不会做就不要乱说!Top
5 楼suki365(″伊雯、)回复于 2005-08-03 20:35:56 得分 0
我说的是 megaboyTop
6 楼suki365(″伊雯、)回复于 2005-08-03 20:43:39 得分 0
llf_hust() 编的怎么不行啊?Top
7 楼boyplayee()回复于 2005-08-03 20:53:42 得分 0
£include <string>
....
string a,b;
...
Top
8 楼LoveYouJustOneDay(哈哈)回复于 2005-08-03 21:03:49 得分 0
#include <stdio.h>
int main( )
{
char s1[30], s2[30];
gets(s1); gets(s2);
if( !strcmp(s1, s2+strlen(s2)-strlen(s1)) )
printf("s1 is in the end of s2\n");
return 0;
}Top
9 楼lbing7(向青润老大学习!!!)回复于 2005-08-03 21:10:49 得分 0
#include <string.h>
/*
函数接受两个值,分别是两个串
要是a在b的最后出现,则返回:1
否则返回:0
*/
int endString(char *a,char *b)
{
int alen,blen;/*分别存放两个串的长度*/
int i;/*存放串的长度差*/
alen = strlen(a);/*取两个串的长度*/
blen = strlen(b);
i = blen - alen;/*取差*/
if (i < 0)/*跳过a比b长的情况*/
{
return 0;
}
if (!strcmp(a,b+i))/*比较,是不是在后面出现,若出现在strcmp返回0*/
{
return 1;
}
else
{
return 0;
}
}/*end */Top
10 楼lbing7(向青润老大学习!!!)回复于 2005-08-03 21:12:18 得分 0
楼上的更强!
Top
11 楼zhilunchen(他山居士)回复于 2005-08-03 21:19:45 得分 0
我最喜欢mm程序员,有QQ没,我加你!Top
12 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-08-03 21:28:13 得分 0
从后面开始比较。Top
13 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-03 21:32:12 得分 0
呵呵,偶给你一个不用任何库函数的版本吧,不需要太多的代码:
int compstrtail(const char * cpSrc, cosnt char * cpDes)
{
const char * cpSrcTemp, * cpDesTemp;
cpSrcTemp = cpSrc;
cpDesTemp = cpDes;
while(*cpSrcTemp != '\0') cpSrcTemp++;
while(*cpDesTemp != '\0') cpDesTemp++;
if(cpSrcTemp-cpSrc > cpDesTemp-cpDes) return 0;
while((--cpDesTemp, --cpSrcTemp) >= cpSrc) if(*cpSrcTemp != *cpDesTemp) return 0;
return 1;
}
如果第一个字符串不在第二个字符串的末尾,返回0,如果在,就返回1。Top
14 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-03 21:34:19 得分 0
晕,真粗心啊,真的又写错了个符号,呵呵,函数第二个参数的cosnt写错了,应为const:
int compstrtail(const char * cpSrc, const char * cpDes)Top
15 楼zhang20084(喜欢物理的程序员)回复于 2005-08-03 21:34:58 得分 0
谢谢啊,小弟我转行C++Top
16 楼suki365(″伊雯、)回复于 2005-08-03 22:17:42 得分 0
#include <string.h>
/*
函数接受两个值,分别是两个串
要是a在b的最后出现,则返回:1
否则返回:0
*/
int endString(char *a,char *b)
{
int alen,blen;/*分别存放两个串的长度*/
int i;/*存放串的长度差*/
alen = strlen(a);/*取两个串的长度*/
blen = strlen(b);
i = blen - alen;/*取差*/
if (i < 0)/*跳过a比b长的情况*/
{
return 0;
}
if (!strcmp(a,b+i))/*比较,是不是在后面出现,若出现在strcmp返回0*/
{
return 1;
}
else
{
return 0;
}
}/*end */
编译的时候没错,但执行的时候就显示一个错误。 不知怎么搞的。
Top
17 楼suki365(″伊雯、)回复于 2005-08-03 22:20:16 得分 0
谢谢啊~`` 谢谢有这么多人帮我。Top
18 楼firstdreamer()回复于 2005-08-03 22:26:55 得分 0
都看到你处女 贴的分上吧,下次可不能再叫什么处女 贴了吧?Top
19 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-03 22:27:48 得分 0
你一撒娇,就有这么多臭男人来帮你了,呵呵...........Top
20 楼richen_99(品味生活)回复于 2005-08-03 22:30:12 得分 0
下次叫妇女贴,不知道到时有没有人帮呢?哈哈...Top
21 楼LoveYouJustOneDay(哈哈)回复于 2005-08-03 22:38:11 得分 0
不知道这个小女子是不是处女了Top
22 楼doway(john)回复于 2005-08-03 22:47:46 得分 0
if (!strcmp(a,b+i))/*比较,是不是在后面出现,若出现在strcmp返回0*/
这个不对,应该用减的。
Top
23 楼Evay(Eva)回复于 2005-08-03 23:46:06 得分 0
为什么sttcmp(a,b+i)中的b+i就是后面的参与比较的那几位呢?
搞不懂 楼上的高手们能不能指点下?Top
24 楼K()回复于 2005-08-03 23:52:26 得分 0
#include <string>
#include <cassert>
bool asshole(const std::string &sa,const std::string &sb)
{
assert(sa.length()>sb.length());
return sa.rfind(sb)==sa.length()-sb.length()?true:false;
}Top
25 楼fengyun1314(追梦)回复于 2005-08-04 17:03:16 得分 0
老太婆贴,现在差不多,明目张胆说处女,谁相信啊!!Top
26 楼jsxyhelu(禾路)回复于 2005-08-04 21:21:22 得分 0
#include <stdio.h>
回复人: LoveYouJustOneDay(哈哈) ( ) 信誉:100 2005-08-03 21:03:00 得
int main( )
{
char s1[30], s2[30];
gets(s1); gets(s2);
if( !strcmp(s1, s2+strlen(s2)-strlen(s1)) )
printf("s1 is in the end of s2\n");
return 0;
}
我记得好象 strcmp是studio.h中的吧!记得不清楚,我没学几天呢!
对了用!strcmp(s1, s2+strlen(s2)-strlen(s1)) ) 的确很强,但最好解释一下!我差不多理解了。Top
27 楼silenceburn(冷静燃烧)回复于 2005-08-04 22:58:24 得分 0
继续跳坑。。lbing7,对你的程序YY一下,别见怪^_^
我来解释strcmp(s1, s2+strlen(s2)-strlen(s1))
HI.MM,在这里呢,你可以把两个字符串想像成两根火腿肠,
STRCMP函数用来比较两根火腿肠是不是完全一样,它有两个参数,
第一个参数实际上是一个指针,指向第一个火腿,
第二个也是指针,我们做了strlen(s2)-strlen(s1),就求得了两根火腿肠长度的差,
(这里我们假定S2长)
我们知道指针是可以移动的,做了加上火腿肠差的操作后,就相当于把两根火腿拿在手里,
让他们的尾巴相并齐,然后看从尾巴到S1的头这一截是不是相同^_^
PS:这个程序个人认为有点小问题,就是当S1.LEN > S2.LEN时,out bound...
Top
28 楼silenceburn(冷静燃烧)回复于 2005-08-04 23:00:53 得分 0
感觉YY过头了^_^
简单说,最关键的就是对一个指针加一个常数,就是向后移动该指针,恩。。,Top
29 楼wscft(努力工作,开心生活!))回复于 2005-08-05 09:51:05 得分 0
从今天开始重新回来学习c++!Top
30 楼geland(ding)回复于 2005-08-05 09:59:17 得分 0
好多人来破处!Top
31 楼lxk_cool()回复于 2005-08-05 15:33:36 得分 0
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1,str2,str3;
cout<<"Input the first string:";
cin>>str1;
cout<<"Input the secong string:";
cin>>str2;
str3=str1.substr(str1.size()-str2.size(),str2.size());
cout<<str3<<endl;
if(!str2.compare(str3))
cout<<"YES!";
else
cout<<"NO!";
return 0;
}Top
32 楼fire314159(水源是学生,穷鬼,闷骚型男人的聚集地,请对号入座)回复于 2005-08-09 12:27:03 得分 0
此帖之后为非处贴,鉴定完毕Top
33 楼honghaier(红孩儿)回复于 2005-08-09 12:34:17 得分 0
这么多人上啊~!!!!!!!!
Top
34 楼SamuelKevin(曼陀罗)回复于 2005-08-09 12:46:10 得分 0
既然大家都上了 我也不能落后!Top
35 楼JFDream_15()回复于 2005-08-09 13:16:01 得分 0
#include <string.h>
/*
函数接受两个值,分别是两个串
要是a在b的最后出现,则返回:1
否则返回:0
*/
int endString(char *a,char *b)
{
int alen,blen;/*分别存放两个串的长度*/
int i;/*存放串的长度差*/
alen = strlen(a);/*取两个串的长度*/
blen = strlen(b);
i = blen - alen;/*取差*/
if (i < 0)/*跳过a比b长的情况*/
{
return 0;
}
if (!strcmp(a,b+i))/*比较,是不是在后面出现,若出现在strcmp返回0*/
{
return 1;
}
else
{
return 0;
}
}/*end */
编译的时候没错,但执行的时候就显示一个错误。 不知怎么搞的。
FAINT~~~
编绎当然没问题,但没有主函数,怎么运行啊?
/*
函数接受两个值,分别是两个串
要是a在b的最后出现,则返回:1
否则返回:0
*/
#include <string.h>
#include <iostream.h>
int endString(char *a,char *b);
void main()
{
char aa[20],bb[20];
cout<<"Input the first string:"<<endl;
cin>>aa;
cout<<"Input the second string:"<<endl;
cin>>bb;
if(endString(aa,bb))
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
int endString(char *a,char *b)
{
int alen,blen;/*分别存放两个串的长度*/
int i;/*存放串的长度差*/
alen = strlen(a);/*取两个串的长度*/
blen = strlen(b);
i = blen - alen;/*取差*/
if (i < 0)/*跳过a比b长的情况*/
{
return 0;
}
if (!strcmp(a,b+i))/*比较,是不是在后面出现,若出现在strcmp返回0*/
{
return 1;
}
else
{
return 0;
}
}/*end */
改成这样子应该就可以了~~
我的环境是VC6.0,若在TC则把cout || cin的改成printf 和 scanf 就可以了
Top
36 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2005-08-09 13:27:03 得分 0
不好意思,中午吃多了点,到这就忍不住了……就麻烦楼主帮个忙清扫一下吧^_^Top
37 楼hunter_32(曠野裡奔嘯的狼)回复于 2005-08-10 14:54:58 得分 0
人真的多啊看來女子的吸引力量就是強啊!Top
38 楼lemonviva(紫云)回复于 2005-08-10 15:25:19 得分 0
int comstring(char *astring ,char*bstring)
{
int alen,blen,i;
alen=stream(astring);
blen=stream(bstring);
for(i=0,astring[alen-i]==bstring[blen-i],i++)
if(i!=alen)return 0;
else return 1;
}Top
39 楼chenzhichao2008(陈智超)回复于 2005-08-10 17:09:43 得分 0
快来人教我做吖~`` 急死了。
=============================
不懂做,不會吧,這個簡單,只要張開大腿就行,Top
40 楼chenzhichao2008(陈智超)回复于 2005-08-10 17:13:34 得分 0
對不起,請不要把我扁成照片了,怕怕Top
41 楼zurich1979(生于忧患,死于安乐)回复于 2005-08-10 18:01:04 得分 0
处女贴?我吐...Top
42 楼codeHappy(thinKing)回复于 2005-08-10 18:10:59 得分 0
我信!Top
43 楼suzr(rain)回复于 2005-08-10 18:23:09 得分 0
LoveYouJustOneDay(哈哈)的程序太好了
值得学习
Top
44 楼flamingheart(火焰心)回复于 2005-08-10 18:23:25 得分 0
用STL中string的rfind成员函数,这个问题就简单得不能再简单了。Top
45 楼iyaosan(aaaa)回复于 2005-08-12 20:44:07 得分 0
有意思! 只要是MM的贴,就特热闹Top
46 楼yyxc306()回复于 2005-08-12 22:22:51 得分 0
LoveYouJustOneDay 的代码太棒了,简单明了,向你学习!Top
47 楼na1ve(柴青)回复于 2005-08-12 22:41:43 得分 0
呵呵,标题是不是真的,virgin?Top
48 楼SetMeFree(借个火)回复于 2005-08-14 02:13:07 得分 0
终于……越来越多的MM加入我们了Top
49 楼51365133(渊海)回复于 2005-08-14 03:09:31 得分 0
bool firstisend(const char *s1,const char *s2)
{
const char *end=s2;
while(*end++);
return (*s1==*--(--end));
}Top
50 楼51365133(渊海)回复于 2005-08-14 03:15:01 得分 0
回复人: megaboy(惹我?把你打成照片!) ( ) 信誉:100 2005-8-3 21:32:13 得分: 0
呵呵,偶给你一个不用任何库函数的版本吧,不需要太多的代码:
int compstrtail(const char * cpSrc, cosnt char * cpDes)
{
const char * cpSrcTemp, * cpDesTemp;
cpSrcTemp = cpSrc;
cpDesTemp = cpDes;
while(*cpSrcTemp != '\0') cpSrcTemp++;
while(*cpDesTemp != '\0') cpDesTemp++;
if(cpSrcTemp-cpSrc > cpDesTemp-cpDes) return 0;
while((--cpDesTemp, --cpSrcTemp) >= cpSrc) if(*cpSrcTemp != *cpDesTemp) return 0;
return 1;
}
如果第一个字符串不在第二个字符串的末尾,返回0,如果在,就返回1。
哈哈,你这个还叫什么“不需要太多的代码”!!!!!!!!!!!I服了youTop
51 楼51365133(渊海)回复于 2005-08-14 04:08:10 得分 0
bool firstisend(const char *s1,const char *s2)
{
const char *start=s1;
while(*s2++);
--s2;
while(*s1++&&*(--s2));
for(;*start&&(*start==*s2);s2++,start++);
return (*start?false:true);
}Top
52 楼hbturkey(是为了程序吗?)回复于 2005-08-14 04:20:50 得分 0
顶...Top
53 楼51365133(渊海)回复于 2005-08-14 04:21:25 得分 0
经过考虑,这种方式也不错。
bool firstisend(const char *s1,const char *s2)
{
while(*s2++);
while(*s1++);
while(*--s1==*--s2);
return (*s1?false:true);
}Top
54 楼nicholasfor(大超)回复于 2005-08-16 21:42:15 得分 0
不结贴没Top
55 楼bit_koko(告别互动)回复于 2005-08-16 21:50:53 得分 0
大家别再 顶 她了 休息下Top
56 楼wxw20032004( ̄(o o) ̄)一头小猪( ̄Д ̄;)回复于 2005-08-17 14:35:24 得分 0
不是不准发"处女贴"嘛?Top
57 楼reliances2003(飞翔在天)回复于 2005-08-17 15:27:52 得分 0
flamingheart(火焰心) :STL高手,给我们推荐基本相关的书吧Top
58 楼nizhiyu(傲天)回复于 2005-08-17 15:43:05 得分 0
各位的代码很好,但是很没效率,难道真的没有人使用c来开发吗?呵呵,
我给一个算法,博各位一笑,看看效果如何
int compare(const char *pStr1, const char *pStr2)
{
return !((pStr1 && pStr2) ? memcmp(pStr1 + strlen(pStr1) - strlen(pStr2), pStr2,
strlen(pStr2)): -1);
}
用法例如:compare("12455454356", "4356");
返回值为1则表示串2在串1的末尾,否则不再串1的末尾。Top
59 楼AAA235(可可豆)回复于 2005-08-17 16:21:34 得分 0
#include <iostream.h>
#include <string.h>
#include <windows.h>
int endstr(char *,char *);
void main()
{
char str1[] = "123123123456";
char str2[] = "123456";
int iRet = endstr(str1,str2);
if(!iRet)cout<<"find"<<endl;
else cout<<"no find"<<endl;
}
int endstr(char *s1,char *s2)
{
char *p = NULL;
strrev(s1);
strrev(s2);
cout<<s1<<endl;
cout<<s2<<endl;
p = strstr(s1,s2);
if(p == s1)return 0;//找到且在末尾
else return -1;//没找到
}Top
60 楼Cocoky(我爱野百合)回复于 2005-08-17 16:58:34 得分 0
处于膜破了!!Top
61 楼rockhard(不签名)回复于 2005-08-17 17:47:08 得分 0
megaboy(惹我?把你打成照片!)
肯定又是个人妖,偶从没见过一个真MM会叫什么“处女贴”、喊什么“同志”的,唉,楼主连扮鬼都不象...
======================================
赞成Top
62 楼xyj_tju(lake_lee)回复于 2005-08-17 18:03:36 得分 0
晕,同样是程序员,做人的差距咋就这么大呢?Top
63 楼xuanwf(轩悟枫)回复于 2005-08-17 20:30:35 得分 0
请参考Megaboy的,结构很清析,Top
64 楼yueshang()回复于 2005-08-17 20:51:11 得分 0
别废话了,快给分啊。Top
65 楼fallening()回复于 2005-08-17 21:12:42 得分 0
upup..Top
66 楼AAA235(可可豆)回复于 2005-08-19 11:54:58 得分 0
怎么不给分啊,我可是按开发原则开发的,用的都是库函数
str1 = "abcdefg"; str2 = "efg"
反过来strrev(str1) = "gfedcba" ; strrev(str2) = "gfe" ;
那么在str1中搜索str2得到的指针不说指向str1首地址吗?
也就是反转前的str1的末尾;思路清晰吧,快给分吧Top
67 楼loveliu0429(lovelipei)回复于 2005-08-19 12:12:26 得分 0
哈哈,女生的魅力果然强,连作业帖都这么多人顶pfpfTop
68 楼K()回复于 2005-08-19 12:32:37 得分 0
2楼你错了.现在的女生都很诚实.是处女就是处女,不是处女作个修复也是处女.Top
69 楼olexpt( n)回复于 2005-08-22 17:19:24 得分 0
哎,女生好可爱啊.Top
70 楼zoulie(落伍者)回复于 2005-08-22 19:15:10 得分 0
为什么是处女帖,跟的人就特多呢??Top
71 楼laomai(老迈)回复于 2005-08-25 09:11:22 得分 0
靠!楼上的megaboy、渊海、lbing等几个饼子,饼子堂的规矩是不回所谓的MM贴,不知道么?Top
72 楼hewittlee(只爱C++)回复于 2005-08-25 11:01:56 得分 0
被破n次处了Top
73 楼cyblueboy83(爱情白痴—电脑迷)回复于 2005-08-25 18:03:51 得分 0
int main(int argc, char* argv[])
{
char * s1 ;
char * s2 ;
//gets(s1); gets(s2);
s1 = "abc";
s2 = "ddabcd";
if( !strcmp(s1, s2+strlen(s2)-strlen(s1)) )
printf("s1 is in the end of s2\n");
return 0;
}Top




