| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 799 人关注过本帖
标题:字符串的连接与求子串,目测只有高手可以帮我解答了
只看楼主 加入收藏
yaojiali920
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2014-2-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
字符串的连接与求子串,目测只有高手可以帮我解答了
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 256            //定义串允许的最大字符个数
typedef struct
{
    char string[MAXSIZE];        //MAXSIZE为串的最大长度
    int len;                      //串的实际长度
}SSTRING;                      //串的顺序存储结构表示
            
int str_len(SSTRING *s)            //串的长度计算函数
{
    return     s->len             ;
}

void str_input(SSTRING *s)         //串的输入函数
 {
    int i=0;                  
    char ch;
    s->len=0;
    while((ch=getchar())!='\n')       //通过循环,从键盘输入一串字符串
    {
        s->string[i]=ch;
        i++;
        s->len++;
    }
    s->string[i]='\0';
}

SSTRING *str_rep(SSTRING *s1,SSTRING *s2,int pos)   
{   //将字符串S1从pos位置处替换S2串
    int i=0,j;
    for(j=pos-1;s1->string[j]!='\0';j++)          //从替换的起始位置开始
        if(s2->string[i]!='\0')
        {
            s1->string[j]=s2->string[i]                     ;       //进行替换
            i++;
        }
        else
        {
            break;
        }
    return s1;
}

SSTRING *str_con(SSTRING *s1,SSTRING *s2)   
{ //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中
    int i=s1->len,j=0,k;
    for(k=0;k<str_len(s2);k++)
    {
              i++              ;   
                            ;
                            ;// 通过循环,将S2串的元素逐一复制到S1串的后面,
                            ;// 合并成一个串。
    }
    s1->string[i]='\0';
    return s1;
}

SSTRING *str_sub(SSTRING *sub,SSTRING *s,int pos,int len)
{//将串S第pos个字符开始的长度为len的字符序列复制到串sub中
   int i=pos-1,j=0,k;
   for(k=1;k<=len;k++)
   {
                             ;//逐一取出S串中从pos开始的元素,并复制到sub串中
                             ;//每复制完一个元素,sub串长度加1。
       i++;
       j++;
   }
   sub->string[j]='\0';
   return sub;
}

void str_print(SSTRING *s)
{//字符串输出显示
    int i;
    for(i=0;i<s->len;i++)
        printf("%c",s->string[i]);                ;//依次将串中的字符逐一输出到屏幕显示。
    printf("\n");
}

void showmenu()
{  //显示菜单
    printf("    欢迎使用串操作小软件\n");
    printf("\t1、求串的长度\n");
    printf("\t2、串的替换\n");
    printf("\t3、串的连接\n");
    printf("\t4、求子串\n");
    printf("\t5、退出程序\n");   
}

void main()
{
       int position,length,no;
    SSTRING str,str1,str2;   
    str.len=0;
    str1.len=0,str2.len=0;
    while(1)
    {
        showmenu();
        printf("    请输入你的选择:");
        scanf("%d",&no);
        switch(no)
        {
            case 1:printf("请输入一串字符:");
                   fflush(stdin);
                   str_input(&str);
                   length=str_len(&str);
                   printf("字符串:%s的长度为%d\n",str.string,length);
                   system("pause");
                   system("cls");
                   break;
            case 2:printf("请输入源字符串:");
                   fflush(stdin);
                   str_input(&str1);
                   printf("请输入替换字符串:");
                   fflush(stdin);
                   str_input(&str2);
                   printf("请输入替换位置:");
                   scanf("%d",&position);
                   str_rep(&str1,&str2,position);
                   printf("替换后的结果为:");
                   str_print(&str1);
                   system("pause");
                   system("cls");
                   break;
            case 3:printf("请输入第一串字符:");
                   fflush(stdin);
                   str_input(&str1);
                   printf("请输入第二串字符串:");
                   fflush(stdin);
                   str_input(&str2);
                   str_con(&str1,&str2);
                   printf("两串字符连接后的结果为:");
                   str_print(&str1);
                   system("pause");
                   system("cls");
                   break;
            case 4:printf("请输入一串字符:");
                   fflush(stdin);
                   str_input(&str1);
                   printf("请输入取子串的位置和长度:");
                   scanf("%d%d",&position,&length);
                   str_sub(&str,&str1,position,length);
                   printf("子串为:");
                   puts(str.string);
                   system("pause");
                   system("cls");
                   break;
            case 5:
                   return;
        }
    }        
}
搜索更多相关主题的帖子: include return 字符串 
2014-05-05 20:54
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:10 
什么问题?


[fly]存在即是合理[/fly]
2014-05-05 23:34
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
初步运行 3  4  有bug  其他3个好像没啥问题

DO IT YOURSELF !
2014-05-06 08:23
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 256            //定义串允许的最大字符个数

typedef struct 
{
    char string[MAXSIZE];        //MAXSIZE为串的最大长度
    int len;                      //串的实际长度
}SSTRING;                      //串的顺序存储结构表示

int str_len(SSTRING *s)            //串的长度计算函数
{
    return     s->len             ; 
}

void str_input(SSTRING *s)         //串的输入函数
{
    int i=0;                   
    char ch;
    s->len=0;
    while((ch=getchar())!='\n')       //通过循环,从键盘输入一串字符串
    {
        s->string[i]=ch;
        i++;
        s->len++;
    }
    s->string[i]='\0';
}

SSTRING *str_rep(SSTRING *s1,SSTRING *s2,int pos)   
{   //将字符串S1从pos位置处替换S2串
    int i=0,j;
    for(j=pos-1;s1->string[j]!='\0';j++)          //从替换的起始位置开始
        if(s2->string[i]!='\0')
        {
            s1->string[j]=s2->string[i]                     ;       //进行替换
            i++;
        }
        else
        {
            break;
        }
        return s1;
}

SSTRING *str_con(SSTRING *s1,SSTRING *s2)   
{ //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中
    int i=s1->len,j=0;
    while(s2->string[j]!='\0') 
    { 
        s1->string[i+j]=s2->string[j];
        j++;
    }
    s1->string[i+j]='\0';
    return s1;
}

SSTRING *str_sub(SSTRING *sub,SSTRING *s,int pos,int len) 
{//将串S第pos个字符开始的长度为len的字符序列复制到串sub中
    int i=pos-1,k;
    for(k=0;k<len;k++)
    {
        sub->string[k]=s->string[i];
        i++;
    }
    sub->string[k]='\0';
    return sub;
}

void str_print(SSTRING *s)
{//字符串输出显示
    printf("%s\n",s->string);
}

void showmenu()
{  //显示菜单
    printf("    欢迎使用串操作小软件\n");
    printf("\t1、求串的长度\n");
    printf("\t2、串的替换\n");
    printf("\t3、串的连接\n");
    printf("\t4、求子串\n");
    printf("\t5、退出程序\n");    
}

void main()
{
    int position,length,no;
    SSTRING str,str1,str2;   
    str.len=0;
    str1.len=0,str2.len=0;
    while(1)
    {
        showmenu();
        printf("    请输入你的选择:");
        scanf("%d",&no);
        switch(no)
        {
        case 1:printf("请输入一串字符:");
            fflush(stdin);
            str_input(&str);
            length=str_len(&str);
            printf("字符串:%s的长度为%d\n",str.string,length);
            system("pause");
            system("cls");
            break;
        case 2:printf("请输入源字符串:");
            fflush(stdin);
            str_input(&str1);
            printf("请输入替换字符串:");
            fflush(stdin);
            str_input(&str2);
            printf("请输入替换位置:");
            scanf("%d",&position);
            str_rep(&str1,&str2,position);
            printf("替换后的结果为:");
            str_print(&str1);
            system("pause");
            system("cls");
            break;
        case 3:printf("请输入第一串字符:");
            fflush(stdin);
            str_input(&str1);
            printf("请输入第二串字符串:");
            fflush(stdin);
            str_input(&str2);
            str_con(&str1,&str2);
            printf("两串字符连接后的结果为:");
            str_print(&str1);
            system("pause");
            system("cls");
            break;
        case 4:printf("请输入一串字符:");
            fflush(stdin);
            str_input(&str1);
            printf("请输入取子串的位置和长度:");
            scanf("%d%d",&position,&length);
            str_sub(&str,&str1,position,length);
            printf("子串为:");
            str_print(&str);
            system("pause");
            system("cls");
            break;
        case 5:
            return;
        }
    }        
}


DO IT YOURSELF !
2014-05-06 08:50
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
你构造这个结构体
程序代码:
typedef struct 
{
    char string[MAXSIZE];        //MAXSIZE为串的最大长度
    int len;                      //串的实际长度
}SSTRING;                      //串的顺序存储结构表示


这是本程序最大的败笔,增加了代码量  增加了代码复杂度  最终把简单问题复杂化

DO IT YOURSELF !
2014-05-06 08:51
yaojiali920
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2014-2-18
收藏
得分:0 
回复 5 楼 wp231957
题目是这样要求的,我真心是写不出来啊。不过非常感谢啦,虽然没能达到要求,但基本有些许思路了
2014-05-06 17:13
HUAT萌新
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-11-26
收藏
得分:0 
回复 楼主 yaojiali920
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 256            //定义串允许的最大字符个数
typedef struct
{
    char string[MAXSIZE];        //MAXSIZE为串的最大长度
    int len;                      //串的实际长度
}SSTRING;                      //串的顺序存储结构表示
            
int str_len(SSTRING *s)            //串的长度计算函数
{
    return s-> len                   ;
}

void str_input(SSTRING *s)         //串的输入函数
 {
    int i=0;                  
    char ch;
    s->len=0;
    while((ch=getchar())!='\n')       //通过循环,从键盘输入一串字符串
    {
        s->string[i]=ch;
        i++;
        s->len++;
    }
    s->string[i]='\0';
}

SSTRING *str_rep(SSTRING *s1,SSTRING *s2,int pos)   
{   //将字符串S1从pos位置处替换S2串
    int i=0,j;
    for(j=pos-1;s1->string[j]!='\0';j++)          //从替换的起始位置开始
        if(s2->string[i]!='\0')
        {
            s1->string[j] = s2->string[i]                    ;       //进行替换
            i++;
        }
        else
        {
            break;
        }
    return s1;
}

SSTRING *str_con(SSTRING *s1,SSTRING *s2)   
{ //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中
    int i=s1->len,j=0,k;
    for(k=0;k<str_len(s2);k++)
    {
        s1->string[i]=s2->string[j]                     ;
         s1->len++                    ;
         i++                     ;// 通过循环,将S2串的元素逐一复制到S1串的后面,
         j++                     ;// 合并成一个串。
    }
    s1->string[i]='\0';
    return s1;
}


SSTRING *str_sub(SSTRING *sub,SSTRING *s,int pos,int len)
{//将串S第pos个字符开始的长度为len的字符序列复制到串sub中
   int i=pos-1,j=0,k;
   for(k=1;k<=len;k++)
   {
        sub->string[j]=s->string[i]                     ;//逐一取出S串中从pos开始的元素,并复制到sub串中
        sub->len++                     ;//每复制完一个元素,sub串长度加1。
       i++;
       j++;
   }
   sub->string[j]='\0';
   return sub;
}

void str_print(SSTRING *s)
{//字符串输出显示
    int i;
    for(i=0;i<s->len;i++)
    printf("%c",s->string[i])                          ;//依次将串中的字符逐一输出到屏幕显示。
    printf("\n");
}

void showmenu()
{  //显示菜单
    printf("    欢迎使用串操作小软件\n");
    printf("\t1、求串的长度\n");
    printf("\t2、串的替换\n");
    printf("\t3、串的连接\n");
    printf("\t4、求子串\n");
    printf("\t5、退出程序\n");   
}

void main()
{
       int position,length,no;
    SSTRING str,str1,str2;   
    str.len=0;
    str1.len=0,str2.len=0;
    while(1)
    {
        showmenu();
        printf("    请输入你的选择:");
        scanf("%d",&no);
        switch(no)
        {
            case 1:printf("请输入一串字符:");
                   fflush(stdin);
                   str_input(&str);
                   length=str_len(&str);
                   printf("字符串:%s的长度为%d\n",str.string,length);
                   system("pause");
                   system("cls");
                   break;
            case 2:printf("请输入源字符串:");
                   fflush(stdin);
                   str_input(&str1);
                   printf("请输入替换字符串:");
                   fflush(stdin);
                   str_input(&str2);
                   printf("请输入替换位置:");
                   scanf("%d",&position);
                   str_rep(&str1,&str2,position);
                   printf("替换后的结果为:");
                   str_print(&str1);
                   system("pause");
                   system("cls");
                   break;
            case 3:printf("请输入第一串字符:");
                   fflush(stdin);
                   str_input(&str1);
                   printf("请输入第二串字符串:");
                   fflush(stdin);
                   str_input(&str2);
                   str_con(&str1,&str2);
                   printf("两串字符连接后的结果为:");
                   str_print(&str1);
                   system("pause");
                   system("cls");
                   break;
            case 4:printf("请输入一串字符:");
                   fflush(stdin);
                   str_input(&str1);
                   printf("请输入取子串的位置和长度:");
                   scanf("%d%d",&position,&length);
                   str_sub(&str,&str1,position,length);
                   printf("子串为:");
                   puts(str.string);
                   system("pause");
                   system("cls");
                   break;
            case 5:
                   return;
        }
    }        
}
2021-11-26 21:11
快速回复:字符串的连接与求子串,目测只有高手可以帮我解答了
数据加载中...
 
   



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

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