当前位置: 代码迷 >> C语言 >> [求助]关于字符串函数的问题(请求帮助)
  详细解决方案

[求助]关于字符串函数的问题(请求帮助)

热度:149   发布时间:2007-04-16 17:08:42.0
[求助]关于字符串函数的问题(请求帮助)

以下是我改过的程序,可还是有问题,主要问题有:
ch1:abababc ch2:abc
ch1:abc ch2:c
这两种情况,系统会提示ch2不在ch1中,请高手帮助,我实在搞不出来了,谢谢


//字符串与字符串比较
#include<stdio.h>
int mystrsubstring(char *p,char *q);
void main()
{
int n=0;
char ch1[30],ch2[30],*p,*q;
p=ch1,q=ch2;
printf("请输入第一个字符串:");
gets(ch1);
printf("请输入第二个字符串:");
gets(ch2);
n=mystrsubstring(ch1,ch2);
if(n>=0)
{
printf("数组2在数组1的下标为:%d\n",n);
}
if(n<0)
{
printf("数组2不在数组1中!\n");
}
}
int mystrsubstring(char *p,char *q)
{
int i=0,j=0,m=0,value,temp,temp1;
while(q[i]!='\0') //判断数组q是否到达最后一项'\0'
{
if(q[0]==p[i]) //判断数组q的第一个值是否与数组p的某一项相等
{
temp=i; //记录数组p的哪一项与数组q的第一项相等
temp1=i;
j=0;
while(q[j]!='\0') //判断数组q是否到达最后一项'\0'
{
if(q[j]!=p[temp]) //判断数组q与数组p的对应项是否相等
{
i=temp1;
break;
}
else
{
j++;
temp++;
}
}
}
else
{
m=0,j=0;
while(q[j]!='\0') //判断数组q是否到达最后一项'\0'
{

if(q[j]!=p[m]) //判断数组q与数组p的对应项是否相等
{
m++;
}
else
{
m++;
j++;
}
}
}
i++;
}
if(q[j]=='\0') //判断是否已经到达数组q的最后一项
{
value=temp1;
}
else
{
value=-1;
}
return value;
}

[此贴子已经被作者于2007-4-18 16:13:23编辑过]

搜索更多相关的解决方案: 请求  字符  函数  

----------------解决方案--------------------------------------------------------
LZ可用 strcmp(char *str1,char *str2)函数比较
str1>str2 返回正数
str1==str2 返回0
str1<str2 函数返回负数
----------------解决方案--------------------------------------------------------
忘说了...

string.h 头文件
----------------解决方案--------------------------------------------------------

我的意思是不调用系统已经作好的函数,而是自己写


----------------解决方案--------------------------------------------------------
int mystrsubstring(char *p,char *q)
{
int i=0,j=0,flag;
while(q[i]!='\0')
{
j=0;
flag=1;
while(q[j]!='\0')
{
if(q[j]!=p[i])
{
i++;
flag=0;
break;
}
else
{
i++;
j++;
}
}
if(flag) break;
}
return flag;
}

时间匆忙....简单安你思路改了下~``看对不?
----------------解决方案--------------------------------------------------------
你的代码我粗略看了一下,觉得算法复杂了点,里面一些语句可以不用,正好我这里有自己以前写的代码,贴出来你自己参考下吧:
================================

#include <stdio.h>
#include <assert.h>

int MyStrCmp( char *, char * );

int main( int argc, char *argv[] )
{
char str_1[10], str_2[10];

fgets( str_1, 10, stdin );
fgets( str_2, 10, stdin );

int flag = MyStrCmp( str_1, str_2 );
if ( flag == 0 )
printf( "str_1 is equal to str_2.\n" );
else if ( flag < 0 )
printf( "str_1 is smaller than str_2\n");
else
printf( "str_1 is bigger than str_2\n" );

return 0;
}

int MyStrCmp( char *str_1, char *str_2 )
{
assert( str_1 && str_2 );

for ( ; *str_1 && *str_2 && *str_1 == *str_2; str_1++, str_2++ )
;
if ( !*str_1 && !*str_2 )
return 0;
return ( *str_1 - *str_2 );
}

----------------解决方案--------------------------------------------------------
请求帮助
----------------解决方案--------------------------------------------------------
  相关解决方案