| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1209 人关注过本帖, 1 人收藏
标题:萌新求助,如何将指针指向的字符串移植到指针上呢?
只看楼主 加入收藏
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
结帖率:80%
收藏(1)
已结贴  问题点数:20 回复次数:8 
萌新求助,如何将指针指向的字符串移植到指针上呢?
问题是这样的,一道题目它定义了两个指针数组,希望能找到其中一个子字符串的下标,看到下标两个字我就奇怪了,这不是只能用到常规数组吗?用a[i]的形式找到i,但是仅知道指针首地址怎么移植到常规数组a[i]上呢?我很困惑。
搜索更多相关主题的帖子: 指针 指向 字符串 移植 数组 
2017-12-07 07:44
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
#include "stdio.h"
#include "string.h"
int findsubstring(char *s,char *sub)
{
   
   
   
   
   
   
}
   



int main()
{    char line[80],substr[10];
     int index;
     gets(line);
     gets(substr);
     index=findsubstring(line,substr);
     if(index>=0)
         printf("index=%d\n",index);
     else
         printf("NOEXIST\n");
     return 0;
}
2017-12-07 07:45
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
这是题目,要求输I am fine    am, 能得出 index=2的结果
2017-12-07 07:46
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
#include "stdio.h"
#include "string.h"
int findsubstring(char *s,char *sub)
{
    int t;
      char *p=s;
    while (p)
     {
        if (*p==*sub)
          t=p-sub;
         return t;
        ++p;
    }
    return 0;
}
   



int main()
{    char line[80],substr[10];
     int index;
     gets(line);
     gets(substr);
     index=findsubstring(line,substr);
     if(index>=0)
         printf("index=%d\n",index);
     else
         printf("NOEXIST\n");
     return 0;
}
本来我是想用这个方法,但后来发现不对,最多只能输出真地址,没办法输出所谓的下标
2017-12-07 07:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
我只会按照标准的C语法写
程序代码:
#include <stdio.h>
#include <string.h>

size_t findsubstring( const char* s, const char* sub )
{
    size_t index = 0;
    for( ; s[index]!=0; ++index )
    {
        size_t i = 0;
        for( ; sub[i]==s[index+i] && sub[i]; ++i );
        if( !sub[i] )
            break;
    }
    return index;
}

int main( void )
{
    char line[80];
    if( fgets(line,sizeof(line)/sizeof(*line),stdin) && line[strlen(line)-1]=='\n' )
        line[strlen(line)-1] = '\0';
    else
        return 1;

    char substr[10];
    if( fgets(substr,sizeof(substr)/sizeof(*substr),stdin) && substr[strlen(substr)-1]=='\n' )
        substr[strlen(substr)-1] = '\0';
    else
        return 1;

    size_t index = findsubstring( line, substr );
    if( line[index] != '\0' )
        printf( "index = %zu\n", index );
    else
        puts( "NOEXIST" );
}

另外,这个搜索算法是很烂的,要想高效的算法,参见C++的boyer_moore_searcher算法: http://en.
2017-12-07 08:32
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
那应该怎么在这样的程序框架中解决呢?

[此贴子已经被作者于2017-12-7 13:19编辑过]

2017-12-07 11:39
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
#include "stdio.h"
#include "string.h"
int findsubstring(char *s,char *sub)
{






}
   
int main()
{    char line[80],substr[10];
     int index;
     gets(line);
     gets(substr);
     index=findsubstring(line,substr);
     if(index>=0)
         printf("index=%d\n",index);
     else
         printf("NOEXIST\n");
     return 0;
}
2017-12-07 11:41
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:15 
int findsubstring(char *s,char *sub)
{
    return strstr(s,sub)-s;
}
2017-12-07 14:44
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
回复 8楼 吹水佬
谢谢大佬,醍醐灌顶,原来strstr可以这样用,真的很巧妙。
2017-12-07 17:42
快速回复:萌新求助,如何将指针指向的字符串移植到指针上呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019732 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved