字符串插入

1.字符串插入(10分)
题目内容:

有两个字符串str和substr,str和substr的字符个数不超过10^5,只包含大小写字母和数字。(字符个数不包括字符串结尾处的’\0’。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式:
输入数据只有一行,格式为
str substr

输出格式:
输出插入之后的字符串。

输入样例:
abcab eee

输出样例:
abceeeab
时间限制:500ms内存限制:32000kb


C语言↓

#include<stdio.h>
#include<string.h>

int main(){
	char str[100000], substr[100000];	//声明字符数组 
	int length, max;
	length = max = 0;
	
	scanf("%s%s", &str, &substr);		//scanf()函数输入字符串,以空格间隔,回车结束 
	length = strlen(str);				//用string库中的strlen()函数获取str字符串长度
                                        //不包括'\0' 
	for(int i=0; i<length; i++){
		if(str[i]>str[max])				//比较str字符串中各字符大小 
			max = i;					//记录最大字符的下标 
	}
	for(int i=0; i<=max; i++) 
		printf("%c", str[i]);			//printf()输出str中最大字符及之前的字符串
	printf("%s", substr);				//其后输出要插入的substr字符串 
	for(int i=max+1; i<length; i++)
		printf("%c", str[i]);			//在substr字符串后继续输入str的后半部分 

	printf("\n");	
	return 0;	
}

过程中遇到的问题:

  1. 不熟悉字符串的数据类型和定义,一开始在输入输出时傻傻地用了%c,翻看ppt才想起是%s;
  2. 不熟悉scanf()函数用法,试了半天不知道怎么实现“C语言在同一行输入两个字符串,以空格隔开,回车结束”
    [外链图片转存失败(img-rPxO7xJw-1569428804389)(en-resource://database/2853:0)]
    直到看见——
    [外链图片转存失败(img-qCxhZwVZ-1569428804390)(en-resource://database/2855:0)]
    scanf遇到空格就停止了……就停止了……停止了……止了……了……………………
    What?!【黑人问号.gif】我脑子的内存是用光了吗???【头大.gif】
    所以直接scanf输入就ok,会自动根据空格分成两个字符串。
  • getchar()是在用户键入回车后,通过缓冲区一个字符一个字符地读取,返回int类型的ASCII码。相对应的有putchar();

getchar由宏实现:#define getchar() getc(stdin)。

getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止。
当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。

getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾则返回-1(EOF),且将用户输入的字符回显到屏幕。

如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。直到缓冲区中的字符读完后,才等待用户按键。
——from 百度百科

  • gets()在用户键入回车后,从缓冲区读入一行字符(以’\n’或EOF结束),返回字符数组的指针。
  • getch()则直接从键盘读取字符,不需键入回车,每输入一个字符都立即返回ASCII码。
  1. 用string.h库里的函数strlen()可以获取字符串长度,这是搜索到的。
    P.S. strlen()和sizeof()的区别在于前者是函数,计数时不包括’\0’,且返回值是size_t类型(无符号整型);而后者是单目运算符,计数时包括结束字符,在编译时计算缓冲区长度,不能用来返回动态分配的内存空间的大小。
    参考文章:C语言strlen与sizeof的区别详解

C++↓

#include<iostream>
#include<cstring>
int main(){
    std::string str, substr;
    while(std::cin>>str>>substr){
        int n = str.length();
        int max = 0;
        for(int i=0; i<n; i++)
            if(str[i]>str[max])
                max = i;
        for(int i=0; i<=max; i++)
            std::cout << str[i];
        std::cout<<substr;
        for(int i=max+1; i<n; i++)
            std::cout << str[i];
        std::cout << std::endl;
    }
    return 0;
}

暂待解决的基础概念性问题:

  1. string类&类模板basic_string
  2. 输入输出流&cin、cin.get()等(输入方法总结
  3. 标准命名空间std
  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值