鱼C论坛

 找回密码
 立即注册
查看: 916|回复: 2

[已解决]C语言找出一个字符串在另一字符串中位置

[复制链接]
发表于 2020-12-24 16:12:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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就不会

                               
登录/注册后可看大图


最佳答案
2020-12-24 17:16:53
本帖最后由 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)                                                        ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-24 17:16:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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)                                                        ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2020-12-26 19:21:27 | 显示全部楼层
ok明白了,谢谢你啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表