|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<string.h>
int main()
{
int strLoc(char str1[],char str2[]);
char str1[10],str2[10];//str1是所要查找的字符串
int place;
scanf("%s",str1);
scanf("%s",str2);
place=strLoc(str1,str2);
printf("%d\n",place);
}
int strLoc(char str1[],char str2[])
{
int result=-1;
int i,k,l,n1,n2;//n1 n2分别为字符串长度
n1=strlen(str1);
n2=strlen(str2);
for(i=0;i<n2;i++)//分别对两个字符串数组进行循环,找
{
if(str1[0]==str2)
{
for(k=i,l=0;k-i<n1;k++,l++)//i代表str2开始下标,l代表
{
if(str2[k]==str1[l])result=i+2;
else
{
result=-1;
break;//跳出这次循环,重新在str2中寻找 ?
}
}
}
if(result!=-1)break;
}
return result;
}请问一下大家为什么用scanf输入字符串就会这样啊,我用gets就不会
本帖最后由 jackz007 于 2020-12-24 17:20 编辑
如果通过 scanf() 函数输入字符串,则字符串中无法包含空格,所以,改用循环 + getchar() 。当然,用 gets() 也是可以的,只不过需要特别处理字符串末尾的换行符 '\n'。
- #include<stdio.h>
- int strLoc(char str1[] , char str2[])
- {
- int i , j , n1 , n2 , result = -1 ;
- for(n1 = 0 ; str1[n1] ; n1 ++) ;
- for(n2 = 0 ; str2[n2] ; n2 ++) ;
- if(n2 <= n1) {
- for(i = 0 ; i < n1 - n2 + 1 ; i ++) {
- for(j = 0 ; j < n2 ; j ++) if(str1[i + j] != str2[j]) break ;
- if(j == n2) {
- result = i ;
- break ;
- }
- }
- }
- return result ;
- }
- int main()
- {
- char c , str1[10],str2[10];//str1是所要查找的字符串
- int i , place ;
- for(i = 0 ; (c = getchar()) != '\n' ; str1[i ++] = c , str1[i] = '\0') ;
- for(i = 0 ; (c = getchar()) != '\n' ; str2[i ++] = c , str2[i] = '\0') ;
- place = strLoc(str1 , str2) ;
- printf("%d\n",place) ;
- }
复制代码
|
|