| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
绝地游戏外挂辅助教学千里之行 始于足下
共有 148 人关注过本帖
标题:萌新求助,如何将指针指向的字符串移植到指针上呢?
只看楼主 收藏
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2017-10-5
结帖率:77.78%
  已结贴   问题点数:20  回复次数:8   
萌新求助,如何将指针指向的字符串移植到指针上呢?
问题是这样的,一道题目它定义了两个指针数组,希望能找到其中一个子字符串的下标,看到下标两个字我就奇怪了,这不是只能用到常规数组吗?用a[i]的形式找到i,但是仅知道指针首地址怎么移植到常规数组a[i]上呢?我很困惑。
5 天前 07:44
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分: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;
}
5 天前 07:45
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2017-10-5
  得分:0 
这是题目,要求输I am fine  和  am, 能得出 index=2的结果
5 天前 07:46
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分: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;
}
本来我是想用这个方法,但后来发现不对,最多只能输出真地址,没办法输出所谓的下标
5 天前 07:52
rjsp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:218
帖 子:5251
专家分:29118
注 册: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.cppreference.com/w/cpp/utility/functional/boyer_moore_searcher
5 天前 08:32
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2017-10-5
  得分:0 
那应该怎么在这样的程序框架中解决呢?

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

5 天前 11:39
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分: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;
}
5 天前 11:41
吹水佬
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:117
帖 子:4832
专家分:19785
注 册:2014-5-20
  得分:15 
int findsubstring(char *s,char *sub)
{
    return strstr(s,sub)-s;
}
5 天前 14:44
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2017-10-5
  得分:0 
回复 8楼 吹水佬
谢谢大佬,醍醐灌顶,原来strstr可以这样用,真的很巧妙。
5 天前 17:42







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

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