| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 795 人关注过本帖, 1 人收藏
标题:串的简单操作
只看楼主 加入收藏
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
结帖率:94.12%
收藏(1)
已结贴  问题点数:10 回复次数:11 
串的简单操作
图片附件: 游客没有浏览图片的权限,请 登录注册
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
void input(char t[])
{int i=0,j=0;
 printf("请输入字符串中的字符:");
 while((t[++j]=getchar())!=10)
 i++;
 t[0]=i;
}
int strAssign(char t[],char *chars)
{int i;
 if(strlen(chars)>MAXSIZE)
 return 0;
 else
 {
   t[0]=strlen(chars);
   for(i=1;i<=t[0];i++)
   t[i]=*(chars+i-1);
 }
 return 1;
}
int concat(char t[],char s1[],char s2[])//用t返回s1和s2连接而成的新串
{int i;
 if(s1[0]+s2[0]<=MAXSIZE)
 {
   for(i=1;i<=s1[0];i++)
   t[1]=s1[i];
   for(i=1;i<=s2[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=s1[0]+s2[0];
   return 1;
 }
 else
 {
   for(i=1;i<=s1[0];i++)
   t[i]=s1[i];
   for(i=1;i<=MAXSIZE-s1[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=MAXSIZE;
   return 0;
 }
}


main()
{char a[MAXSIZE],b[MAXSIZE],t1[MAXSIZE],t2[MAXSIZE];
 int i;
 input(a);
 input(b);
 strAssign(t1,a);
 printf("生成一个其值等于a的串t1:\n");
 printf("输出串t1:\n");
 printf("%s",t1);
 printf("a和b连接生成新串t2:\n");
 concat(t2,a,b);
 printf("输出串t2:\n");
 printf("%s",t2);     
}


搜索更多相关主题的帖子: include return 字符串 
2010-04-13 21:28
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-04-13 21:29
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
为什么编译后出现乱码?哪位高手帮我解释一下
2010-04-13 21:30
freegod
Rank: 2
等 级:论坛游民
帖 子:33
专家分:73
注 册:2010-4-12
收藏
得分:3 
我把你的代码改了一下,应该行了,出现乱码是因为t1、t2串默认是非空的,它们的值是内存中的值。其实没改什么,就是稍微改了strAssign函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
void input(char t[])
{int i=0,j=0;
printf("请输入字符串中的字符:");
while((t[++j]=getchar())!=10)
i++;
t[0]=i;
}
int strAssign(char t[],char *chars)
{int i;
if(*chars>MAXSIZE)
return 0;
else
{
   t[0]=*chars;
   for(i=1;i<=t[0];i++)
   t[i]=*(chars+i);
}
return 1;
}
int concat(char t[],char s1[],char s2[])//用t返回s1和s2连接而成的新串
{int i;
if(s1[0]+s2[0]<=MAXSIZE)
{
   for(i=1;i<=s1[0];i++)
   t[i]=s1[i];
   for(i=1;i<=s2[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=s1[0]+s2[0];
   return 1;
}
else
{
   for(i=1;i<=s1[0];i++)
   t[i]=s1[i];
   for(i=1;i<=MAXSIZE-s1[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=MAXSIZE;
   return 0;
}
}


main()
{char a[MAXSIZE],b[MAXSIZE],t1[MAXSIZE]={""},t2[MAXSIZE]={""};
int i;
input(a);
input(b);
strAssign(t1,a);
printf("生成一个其值等于a的串t1:\n");
printf("输出串t1:\n");
printf("%s",t1);
//for(i=1;i<=t1[0];i+=1)printf("%c",t1[i]);
printf("\n");
printf("a和b连接生成新串t2:\n");
concat(t2,a,b);
printf("输出串t2:\n");
printf("%s",t2);
//for(i=1;i<=t2[0];i+=1)printf("%c",t2[i]);   
}


[ 本帖最后由 freegod 于 2010-4-13 23:13 编辑 ]
2010-04-13 23:07
freegod
Rank: 2
等 级:论坛游民
帖 子:33
专家分:73
注 册:2010-4-12
收藏
得分:0 
我也是新手,如有错误,请指出~~~~~~~
2010-04-13 23:10
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-04-14 13:19
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
连接时把t1给丢了……t1那块出现的是乱码
2010-04-14 13:20
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:7 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
void input(char t[])
{int i=0,j=0;
printf("请输入字符串中的字符:");
while((t[++j]=getchar())!=10)
i++;
t[0]=i;//整数型赋值给字符
}
int strAssign(char t[],char *chars)
{int i;
if(strlen(chars)>MAXSIZE)
return 0;
else
{
   t[0]=strlen(chars);//把一个整数赋值给字符型
   for(i=1;i<=t[0];i++)
   t[i]=*(chars+i-1);
}
return 1;
}
int concat(char t[],char s1[],char s2[])//用t返回s1和s2连接而成的新串
{int i;
if(s1[0]+s2[0]<=MAXSIZE)//哪字符与整形比较
{
   for(i=1;i<=s1[0];i++)
   t[1]=s1[i];
   for(i=1;i<=s2[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=s1[0]+s2[0];
   return 1;
}
else
{
   for(i=1;i<=s1[0];i++)
   t[i]=s1[i];
   for(i=1;i<=MAXSIZE-s1[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=MAXSIZE;
   return 0;
}
}


main()
{char a[MAXSIZE],b[MAXSIZE],t1[MAXSIZE],t2[MAXSIZE];
int i;
input(a);
input(b);
strAssign(t1,a);
printf("生成一个其值等于a的串t1:\n");
printf("输出串t1:\n");
printf("%s",t1);
printf("a和b连接生成新串t2:\n");
concat(t2,a,b);
printf("输出串t2:\n");
printf("%s",t2);     
}
你里面基本上都是一个错误,就是把整型赋值给字符数组元素,结果可想而知
出来的值,与自己想的都不一样,

坚持做对的事情,而不是容易的事情。
2010-04-14 13:54
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
void input(char t[])
{
    int i=0,j=1;
    printf("请输入字符串中的字符:");
    while((t[j++]=getchar())!='\n')
    i++;
    t[0]=(char)i;
}
int strAssign(char t[],char *chars)//把char的值付给t
{
    int i;
    if((int)chars[0]>MAXSIZE)
     return 0;
    else
    {
      t[0]=chars[0];
      for(i=1;i<=(int)t[0];i++)
      t[i]=chars[i];//逐个赋值
    }
    t[i]='\0';
    return 1;
}
int concat(char t[],char s1[],char s2[])//用t返回s1和s2连接而成的新串
{
    int i,j,k;
    if((int)s1[0]+(int)s2[0]<=MAXSIZE)
    {
       for(i=1;i<=(int)s1[0];i++)
       t[i]=s1[i];
       for(j=i,k=1;k<=(int)s2[0];j++,k++)
       t[j]=s2[k];
       t[0]=(char)((int)s1[0]+(int)s2[0]);
      t[j]='\0';
    return 1;
    }
   else
   {
   for(i=1;i<(int)s1[0];i++)/*这段代码我没改,你自己试着弄下,就不会再犯了*/
   t[i]=s1[i];
   for(i=1;i<MAXSIZE-(int)s1[0];i++)
   t[s1[0]+i]=s2[i];
   t[0]=(char)MAXSIZE;
   t[j]='\0';
   return 0;
   }
   
}


main()
{char a[MAXSIZE],b[MAXSIZE],t1[MAXSIZE],t2[MAXSIZE];
int i;
input(a);
input(b);
strAssign(t1,a);
printf("生成一个其值等于a的串t1:\n");
printf("输出串t1:\n");
printf("%s\n",t1+1);
printf("a和b连接生成新串t2:\n");
concat(t2,a,b);
printf("输出串t2:\n");
printf("%s\n",t2+1);
}
我把加上的去东西都用红笔弄出来了
用的强制格式转换.
弄了半个小时终于改出来了,我现在对类型转换,输出有了一份新的理解。。。。

坚持做对的事情,而不是容易的事情。
2010-04-14 14:39
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
能解释一下后面为什么一定要加上t[j]='\0'?
2010-04-14 17:07
快速回复:串的简单操作
数据加载中...
 
   



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

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