首页 > 试题广场 >

字符串连接

[编程题]字符串连接
  • 热度指数:15668 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。

输入描述:
每一行包括两个字符串,长度不超过100。


输出描述:
可能有多组测试数据,对于每组数据,
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
输出连接后的字符串。
示例1

输入

abc def

输出

abcdef
//用向量
#include<iostream>
(720)#include<vector>
#define VEC vector<char>
using namespace std;

int main() {
    VEC str1,str2;
    VEC::iterator ite;
    char ch;
    bool flag = false;
    while(cin.get(ch)) {
        if(ch == ' ') {
            flag = true;
            continue;
        }
        if(ch != '\n') {
            if(!flag) str1.push_back(ch);
            else str2.push_back(ch);
        } else {
            str1.insert(str1.end(), str2.begin(), str2.end());
            str2.clear();
            for(ite = str1.begin(); ite != str1.end(); ite++)
                cout<<*ite;
            cout<<endl;
            str1.clear(); 
        }

    }
    return 0;
}


发表于 2020-03-26 15:01:01 回复(1)
#include <iostream>
using namespace std;
int main()
{
    char a[101];
    char b[101];
    while(cin>>a>>b)
    {
        char res[201]={'\0'};
        char *p=a;
        int i=0;
        while(*p!='\0')
        {
            res[i]=*p;
            p++;
            i++;
        }
        char *q=b;
        while(*q!='\0')
        {
            res[i]=*q;
            q++;
            i++;
        }
        res[i]='\0';
        cout<<res<<endl;
    }
    return 0;
}
发表于 2017-03-30 19:04:44 回复(1)
//无冗余就先计算两个字符串长度,然后动态申请一个数组
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1,s2;
    cin>>s1>>s2;
    int i=0,j=0;
    char *s3;
    while(s1[i]!='\0')
    {
        i++;
    }
    while(s2[j]!='\0')
    {
        j++;
    }
    s3=new char[i+j];
    i=j=0;
    while(s1[i]!='\0')
    {
        s3[i]=s1[i];
        i++;
    }
    while(s2[j]!='\0')
    {
        s3[i]=s2[j];
        i++;
        j++;
    }
    for(int k=0;k<i;k++)
        cout<<s3[k];
    return 0;
}
发表于 2020-01-12 16:15:52 回复(0)
/*实现功能:不借用任何字符串库函数,实现无冗余地接收两个字符串,然后把 它们无冗余的连接起来
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int i=1, j=1, k;
	char a;
	char *p1 = (char *)malloc(sizeof(char));
	char *p2 = (char *)malloc(sizeof(char));
	while( (a=getchar() )!='/n')   //无冗余地输入字符串1
	{
		p1 =(char *) realloc(p1, sizeof(char)*i );
		*(p1+i-1) = a;
		i++;
	}
	p1 = (char *)realloc(p1, sizeof(char)*i);		//为字符串结束标志多开辟一个字节的空间
	*(p1+i-1) = '/0';               //添加字符串结束标志
	
	while( (a=getchar() )!='/n')	//无冗余地输入字符串2
	{
		p2 =(char *) realloc(p2, sizeof(char)*j );
		*(p2+j-1) = a;
		j++;
	}
	p2 = (char *)realloc(p2, sizeof(char)*j);      //为字符串结束标志多开辟一个字节的空间
	*(p2+j-1) = '/0';               //添加字符串结束标志
	p1 = (char *)realloc(p1, sizeof(char)*(i+j-1));
	for(k=0;k<j;k++,i++)			//将第二个字符串连接到第一个字符串的后面
	{
		*(p1+i-1) = *(p2+k);
	}
	printf("%s/n", p1);
	return 0;
}

发表于 2021-02-25 15:13:29 回复(0)
#include <iostream>
#include<cstdio>

using namespace std;

int main()
{
    char str[100];
    while(~scanf("%s",str))
        printf("%s",str);
    return 0;
}
scanf有返回值,在输入字符串时,碰到空格会停止。
发表于 2021-01-15 11:10:50 回复(0)
#include<stdio.h>
int main()
{
    char a[100],b[100],c[100];
    scanf("%s%s",a,b);
    int i,j,k;
    for(i=0;i<100;i++)//存储a
    {
        if(a[i]!='\0') c[i]=a[i];
        else break;
    }
    for(k=0,j=i;j<200;j++,k++)//存储b
    {
        if(b[k]!='\0') c[j]=b[k];
        else break;
    }
    c[j]='\0';//别忘记结尾的\0
    printf("%s",c);
}

发表于 2020-03-29 10:53:55 回复(0)
//关键在于不用Strlen求字符串长度,需要自己编写代码
//无冗余需要用到动态数组new
#include<iostream>
#include<stdlib.h>
using namespace std;

//用递归求字符串长度,字符串都以'\0'结尾
int strlen1(char * ch){
    if(*ch!='\0')return strlen1(ch+1)+1;
    else return 0;
}
int main(){
    char *ch1=new char [100]; //不超过100
    char *ch2=new char [100];
    cin>>ch1>>ch2;
    int len1=strlen1(ch1),len2=strlen1(ch2);
    int len=len1+len2+1;
    char *ch=new char[len];
    int i=0,j=0;;
    for(;i<len1;i++)
        ch[i]=ch1[i];
    for(j=0;j<len2;j++)
        ch[i+j]=ch2[j];
    ch[i+j]='\0';
    cout<<ch;
    delete[]ch;
    delete []ch1;
    delete []ch2;
}

编辑于 2020-03-19 23:45:40 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    /**
     * 确实没有用任何字符串库函数,哈哈
     * */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println(scanner.next()+scanner.next());
    }
}


发表于 2020-03-13 16:19:48 回复(0)
使用一个死循环来进行输入。当接收到回车符时跳出循环表示输入结束,如果字符不是回车符也不是空格的时候表示可以输出。
#include<stdio.h>
#include<string.h>
int main(){
    char str;
    int index=0;
    while(1){
        str=getchar();
        if(str=='\n'){
            break;
        }
        else if(str!=' '){
            printf("%c",str);
        }
    }
    return 0;
}

发表于 2020-02-05 16:55:17 回复(0)
import java.util.Scanner;

public class Main{
public static void main(String[] args){
Scanner scanr=new Scanner(System.in);
String str=scanr.nextLine();
System.out.println(str.replace(" ",""));
}
}

//C版
#include<stdio.h>

int main(){
    char a[202];
    int i=0;
    int j;
    gets(a);
    while(a[i]!=' ')
        i++;
    j=i;
    while (a[i]==' ')
        i++;
    
    do
    {
        a[j]=a[i];
        i++;
        j++;
    }while(a[i]!='\0');
    a[j]=a[i];
    printf("%s",a);
    return 0;
}

编辑于 2018-06-01 15:25:55 回复(0)
#include<iostream>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        cout<<s;
    }
    return 0 ;
}
发表于 2020-01-09 17:24:07 回复(0)
#include<bits/stdc++.h>
int main(){
    char a[101]={},b[101]={};
    while(scanf("%s %s ",a,b)!=EOF)
        printf("%s%s\n",a,b);
}
发表于 2019-03-04 15:27:48 回复(0)
#include <stdio.h>
#include <stdlib.h>
//不使用字符串库函数就是说用char
//无冗余那就不能用数组
//那么只能用malloc和realloc了
int main(int argc,const char * argv[])
{
    int i = 1,j=1,k;
    char * p1 = (char *)malloc(sizeof(char));
    char * p2 = (char *)malloc(sizeof(char));
    char a;
    while((a = getchar())!=' ')
    {
        p1 = (char *)realloc(p1,sizeof(char)*i);
        *(p1+i-1) = a;
        i++;
    }
    p1 = (char *)realloc(p1,sizeof(char)*i);
    *(p1+i-1) = '\0';
    
    while((a = getchar())!='\n')
    {
        p2 = (char *)realloc(p2,sizeof(char)*j);
        *(p2+j-1) = a;
        j++;
    }
    p2 = (char *)realloc(p2,sizeof(char)*j);
    *(p2+j-1) = '\0';
    p1 = (char *)realloc(p1,sizeof(char)*(i+j-1));
    for(k = 0;k<j;k++,i++){
        *(p1+i-1) = *(p2+k);
    }
    printf("%s",p1);
    free(p2);
    free(p1);
    return 0;
}

发表于 2018-12-31 19:49:17 回复(6)
while True:
    try:
        print(input().replace(" ",""))

    except:
        break
发表于 2017-10-01 16:31:04 回复(0)
#include<stdio.h>
#include<stdlib.h>

int main()
{
	char s1[100], s2[100];
	while (~scanf("%s %s", s1, s2))
		printf("%s%s\n", s1, s2);
    return 0;
}

发表于 2017-03-21 21:28:50 回复(6)
#include <iostream>
#include <string>

int main(){
    using namespace std;
    string str1;
    string str2;
    while(cin >> str1 >> str2)
        cout << str1 + str2 << endl;
    return 0;
}

发表于 2017-03-16 14:13:37 回复(2)
谢谢yyywww的思路,直接用一般的数组容易出现冗余和越界的问题,这题用动态分配内存的方法挺好的,c++也能用vector
这种题直接利用输入输出也还可😂
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
    char ch;
    int i=0;                       //用i来记录字符串长度
    char* str=(char*)malloc(sizeof(char));
    while((ch=getchar())!=' '&&ch!='\n'){        //遇见空格或者换行结束循环
        str=(char*)realloc(str,sizeof(char)*(++i));  //再分配内存,以便存入新的字符
        *(str+i-1)=ch;
    }
    while((ch=getchar())!=' '&&ch!='\n'){    //第二个字符串存入
        str=(char*)realloc(str,sizeof(char)*(++i));
        *(str+i-1)=ch;
    }
    str=(char*)realloc(str,sizeof(char)*(++i)); //存入最后一个结束符
    *(str+i-1)='\0';
    cout<<str<<endl;
    free(str);                 //释放内存空间
    return 0;
}



编辑于 2020-03-07 14:23:47 回复(1)
#include <iostream>
#include <cstdio>
using namespace std;

const int maxn=101;

int main()
{
    char str1[maxn],str2[maxn];
    scanf("%s %s",str1,str2);
    printf("%s%s",str1,str2);
    return 0;
}

发表于 2020-01-19 20:47:35 回复(0)
print(''.join(input().split()))

发表于 2018-07-05 02:10:04 回复(0)
#include <iostream>
using namespace std;

int main() {
    string str1,str2;
    while (cin >> str1 >> str2) {
        string str = str1+str2;
        cout << str << endl;
    }
    return 0;
}

发表于 2022-03-18 20:44:39 回复(0)