编一个程序,将两个字符串连接起来,(1)用strcat函数(2)不用strcat函数。

编一个程序,将两个字符串连接起来,(1)用strcat函数(2)不用strcat函数。,第1张

(1)用strcat函数

#include <stdioh>

#include <stringh>

int main ()

{

char src[50], dest[50];

strcpy(src,  "This is source");

strcpy(dest, "This is destination");

strcat(dest, src);

printf("最终的目标字符串: |%s|", dest); 

return(0);

}

(2)不用strcat函数

#include <stdioh>

#include <stringh>

#define N 200

#define M 100

int main(void)

{

char str1[N],str2[M];

int cou1 = 0,cou2 = 0;// 初始化下标

printf("input string1:\n");// 提示输入字符串1

gets(str1);// 输入字符串1

printf("input string2:\n");// 提示输入字符串2

gets(str2);// 输入字符串2

for(cou1 = strlen(str1); str2[cou2] != '\0'; cou2++)

str1[cou1 ++] = str2[cou2];

str1[cou1] = '\0';// 对处理过的字符串加上结束标志'\0',没有'\0'就是字符数组不是字符串

printf("new string is:\n%s\n",str1);// 输出处理过的字符串

return 0;

}

扩展资料:

需要说明的是:

1、一个C语言源程序可以由一个或多个源文件组成。

2、每个源文件可由一个或多个函数组成。

3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。

4、源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。

5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。

6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

7、通过strlen可以得到字符串的实际长度(不包含’\0’);字符串的结尾是’\0’。

参考资料:

百度百科-c语言

由于不知道你是想测试什么东西,所以只能把一些错误找到!

其余的靠你自己了啊!!

#include <iostream>

#include <cstring>

using namespace std;

struct stringy

{

char str;

int ct;

};

void set(stringy & st,char ps[]);

void show(stringy & st,int n=1);

void show(char ps, int n=1);

int main()

{//不知道你这些是什么功能啊!!!有点乱

stringy beany;

char testing[]="Reality isn't what it used to be";

set(beany,testing);

show(beany);

show(beany,2);

testing[0] = 'D';

testing[1] = 'u';

show(testing);

show(testing,3);

show("Done! " );

return 0;

}

void set(stringy & st,char ps[])

{

int len = strlen(ps);

ststr = new char[len+1]; //因为字符串结尾是有默认的附加'\0',所以多加一个

strcpy(ststr,ps);

cout<<ststr <<endl;//这句就可以看出已经赋值了!!

stct = len;

delete [] ststr; //这里就去掉的话,意思就是把存过去的东西又去掉了!

return;

}

void show(stringy &st,int n)

{

for(int i=0;i<n;i++) //这些for循环语句不知道作用

{

cout << ststr << endl; //这里要加个不然不是只把地址输出了啊!!!

cout << stct << endl;

}

}

void show(char ps, int n)

{

for(int i=0;i<n;i++)

cout << ps << endl;

}

/基本上改完了,功能能够正常实现,删了一些也改了一些函数,就是这样/

#include<stdioh>

#include<stringh>

#include<stdlibh>

//#include<iostreamh>

//学生结构体

struct student

{

long xh;//定义学号

char xm[10];//姓名

float yw,sx,yy;//语文,数学,英语成绩

float zf;//总分

};

struct list

{

struct student stu;/这里必须命名为struct struct student stu/

struct list next;/同上如果要写简洁的话请用typedef下面所有的皆一样/

};

/

定义init函数 为struct list型

作用:对输入的结构体变量增加链表

实际过程中已没用这个函数了,所以也不看了

/

struct list init(struct list L, struct student s)

{

int i;

struct list head,p;/修改了,加了个head,以保存首地址/

head = L;

p=(struct list)malloc(sizeof(struct list));/为链表申请一个新的空间/

p->next =NULL;

p->stuyw = syw;

p->stusx = ssx;

p->stuyy = syy;

p->stuzf = szf;

for(i=0;i<10;i++)

p->stuxm[i] = sxm[i];

p->stuxh = sxh;

head->next=p;/把原来的链表与新链表链接/

return head;/返回首地址/

}

//求链表长度

int length(struct listL)

{

int i=0;

struct list p=L->next;/声明一个结构体变量p使它指向输入的结构体,已经修改。/

while(p!=/L/NULL)/当p没到末尾的时候/

{

i++;/自增/

p=p->next;/指向下一个/

}

return i;

}

//返回总分小于X的位置

int locate(float x,struct list L)

{

int l=length(L);/得到链表的长度/

struct list p = L->next ;/不要在中间定义!/

int i=0;

if(l==0)

return 0;

while(p!=NULL)/当链表没到尾时查找,应该存在的位置/

{

if((p->stu)zf <= x)

break;

i++;

p=p->next;

}

return i;/返回,总分小于x的位置/

}

///并没有用这个函数

int locateS(long id,struct list L)

{

struct list p=L->next ;

int i=0;

while(p!=L)

{

i++;

if((p->stu)xh ==id)

return i;

p=p->next ;

}

return 0;

}/

//放入链表/就是把加入的数往这个L链表里面放/

int insert(struct list s,struct list L)

{

/s是临时结构体,L是链表/

float f = (s->stu)zf;/将f定义为总分/

int n=locate(f,L);/n为链表中f所应该在的位置/

int i=0;

struct list p=L;

struct list tem;

while(i<n)

{

i++;

p=p->next;

}

/和数的交换同理把他们连接的位置进行交换就是,就把他插进去了/

tem=p->next ;

p->next =s ;

s->next =tem;

return 1;

}

//增加学生成绩

int add(struct list L)

{

struct list p=(struct list )malloc(sizeof(struct list));

int okname=1;

int i;

printf("输入学号:");

scanf("%ld",&((p->stu)xh) );

while(okname)/输入名字,若是超过9位永远循环/

{

printf("输入姓名:");

scanf("%s",&((p->stu)xm) );

if(10<strlen((p->stu)xm))

{

printf("名子不能超过9位,请重新输入!\n");

}

else

okname=0;

}

i= strlen((p->stu)xm );

//int i=strlen(q->xm);不能在中间定义!!已经移植函数头

p->stuxm[10]='\0';//最后一位添上0,结束,其实用%s输入了就可以不添了

while(10!=i)

{

(p->stu)xm[i]=' ';

i++;

}

printf("输入语文成绩:");

scanf("%f",&(p->stu)yw);

printf("输入数学成绩:");

scanf("%f",&(p->stu)sx);

printf("输入英语成绩:");

scanf("%f",&(p->stu)yy);

(p->stu)zf = (p->stu)yw + (p->stu)sx + (p->stu)yy;

if(!(insert(p,L)))

printf("输入出错");

return 1;

}

void choice1(struct list L);

void input(struct list L);

void scan(struct list L);

//主函数

int flag=1;

char choice=0;

void main()

{

struct list L;

Lnext = NULL;/注意,要把后面赋值为空,不然后面输出会错误/

choice1(/init(/&L/)/);//

}

//选择函数,没多少讲的

void choice1(struct list L)

{

while(flag)

{

system("cls");

printf("\n\n");

printf("欢迎使用学生成绩排序系统\n");

printf("\n 请选择下列序号。\n");

printf("1输入记录。\n");

printf("2查看排名。\n");

printf("3退出。\n");

scanf("%c",&choice);

switch(choice)

{

case '1':

input(L);

break;

case '2':

scan(L);

break;

case '3':

flag=0;

break;

default:

printf("input err!");

break;

}

}

}

/输入链表,经过的函数->add->insert->locate->length->locate->insert->add->

进行增加链表,基本思想是:先MOLLOC一个空间,存上这一次要添加的成绩,然后,找到总分应该在链表中的位置,最后给他插进去,OK

/

void input(struct list L)

{

system("cls");

printf("\n");

add(L);

printf("按0退出,任意键返回 \n");

scanf("%d",&flag);

}

void scan(struct list L)

{

struct list p=L->next ;//不能从L开始,因为一开始就没用L- -

system("cls");

printf("\n");

//struct list p=L->next ;

while(p!=NULL)//当没在链表尾部时,输出成绩

{

printf("学号:%ld ",(p->stu)xh);

printf("姓名:%s ",(p->stu)xm);

printf("语文:%1f ",(p->stu)yw);

printf("数学:%1f ",(p->stu)sx);

printf("英语:%1f ",(p->stu)yy);

printf("总分:%1f ",(p->stu)zf);

printf("平均分:%1f\n",(p->stu)zf/3);

p=p->next ;//移位至下一个

}

printf("按0退出,任意键返回 \n");

scanf("%d",&flag);

}

#include <stdioh>

#include <stdlibh>

#include <stringh>

int test(const char str)

{

    int length, i = 0, j = 0;

    char pl, pr, tmp, sign = 0;

    tmp = str;

    length = strlen(str);

    for(i = 0; i < length; i++){

        char c = (str+i);

        if(c == '+'|| c == '-' || c == '' || c == '/' || c == '%'){

            sign = c;

            break;

        }

    }

    (tmp + i) = '\0';

    pl = tmp;

    pr = tmp+i+1;

    i = atoi(pl);

    j = atoi(pr);

    if(sign == '+')

        return i+j;

    else if(sign == '-')

        return i-j;

    else if(sign == '')

        return ij;

    else if(sign == '/')

        return i/j;

    else

        return i%j;

}

int main(void)

{

    char str[10] = {0};

    scanf("%s", &str);

    printf("%d\n",test(str));

    return 0;

}

简单写了点,很多容错没做,空格,字母什么的都没有判断,不过简单思路就这样,用解释型语言写简单点,python就很好写

以上就是关于编一个程序,将两个字符串连接起来,(1)用strcat函数(2)不用strcat函数。全部的内容,包括:编一个程序,将两个字符串连接起来,(1)用strcat函数(2)不用strcat函数。、请各位C++高手帮忙修改一下下面的源代码,谢谢!、帮忙给下面的源程序注释,谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9785272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存