H面试程序(28):字符串处理转换

常见C语言面试题之二:浮点数转换为字符串 #include "stdafx.h"#include "stdlib.h"char *F2S(double d, char* str){  char str1[40];  int j=0,k,i;  i = (int)d;  //浮点数的整数部分  //d = d-(int)d;  while(i>0)  {    str1[j++] = i%10+0;    i /= 10;  }  fo 阅读详情

 

 

//2 字符串处理转换
//问题描述:    
//在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,
//其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);
//找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),
//然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;
//如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
//要求实现函数:
//void my_word(charinput[], char output[])
//【输入】  char input[], 输入的字符串
//【输出】  char output[],输出的字符串
//【返回】 无
//示例
//输入:charinput[]="some local buses, some1234123drivers" ,
//输出:charoutput[]="drivers local buses some"
//输入:charinput[]="%A^123 t 3453i*()" ,
//输出:charoutput[]=""
#include<stdio.h>
#include<assert.h>
void my_word(char input[ ], char output[ ])
{   
	assert(input);
    assert(output);
	int flag = 1;//一个标识,为1表示遇到了非字母的字符
	int i = 0;   //作为扫描字符串的标识
	int newp = 0; //作为存放调整后字符串的标识
	
	//把字符串进行扫描,变成英语的句式  “(单词1)_(单词2)+(单词3)”	中间的间隔式非字母字符
	while(input[i] != '\0') //此处i作为一个扫描指针,newp作为一个调整后的指针,存放符合要求的字符
	{
		if(( (input[i] < 'A' )||(input[i] > 'Z'&&input[i]<'a') || ( input[i] >'z'))&& (flag == 1) )//之前遇到了非字母,现在遇到的是非字母
		{
			i++;
		}
		else if(((input[i] >= 'a' && input[i] <= 'z') || (input[i] >='A'&& input[i] <='Z'))&& (flag == 1) )//之前遇到了非字母,现在遇到的是字母
		{                    
			input[newp++] = input[i++] ;		   
			flag = 0;
		}
		
		else if (  ((input[i] >= 'a' && input[i] <= 'z') || (input[i] >='A'&& input[i] <='Z'))&& (flag == 0) )//之前遇到了字母,现在遇到的是字母
		{
			input[newp++] = input[i++];			 
		}
		else //之前遇到了字母,现在遇到的是非字母
		{        
			input[newp++] = input[i++] ;
			flag = 1;	
		}
	}
	
	input[newp] = '\0';
	printf("%s\n",input);	//输出调整后的字符	  
	
	
	
	int NumOfNotchar = 0 ;//统计出字符串中的单词数,NumOfNotchar+1
	i = 0;
	while(input[i] != '\0' )
	{	 
		if( (input[i] < 'A' )||(input[i] > 'Z'&&input[i]<'a') || ( input[i] >'z')) //通过非字母的个数来判断调整后单词的个数
			NumOfNotchar++;
		i++;
	}
	newp = 0; 
	int lastpos = 0;  //存放之前字符串中最长单词的长度的位置
	int lastlength = 0;  //存放之前字符串中最长单词的长度
	for(int n = 0; n < NumOfNotchar ; n++ )  //
	{
		i = 0;
		int maxlength = 0; //存放当前字符串中最长单词的长度
		int length = 0;  //记录单词的长度
		int maxpos = 0;//存放当前字符串中最长单词的长度的位置
		int flag2 = 0;  //作为一个标识,判断当前单词与上一个单词是否一样
		
		
        //当前字符串中的最个数
		int Numofinput = 0;    
		while(input[i] != '\0' )
		{
			Numofinput++;
			i++;
		}
		
		
		i = 0; //作为扫描字符串的指针
		int prepos = Numofinput; //prepos存放(再长度相同情况下最前面)最长单词的起始位置
		
		while(i <= Numofinput )
		{
			if( ((input[i] >= 'a' && input[i] <= 'z') || (input[i] >='A'&& input[i] <='Z')) ) //遇到的是字母
			{   
				length++;
				i++;
				continue;
			}
			else if (length >= maxlength && length!=1 )  //遇到非字母了
			{
				
				i++;
				
				maxpos = i-length-1 ; //暂时存放当前最大的单词的起始位置
				if( length > maxlength)  //除非你比最大的长度还大,否则不改变prepos起始位置,prepos存放(再长度相同情况下最前面)最长单词的起始位置
				{
					prepos = maxpos;  
				}
				
				maxlength = length;  
				length = 0;
				
                
				if( maxlength == lastlength  ) //如果当前的最长字符和之前的字符等长,判断是否相等
				{      
					for(int j = 0; j<maxlength; j++)
					{
						if(input[(prepos+j)] == output[(lastpos+j)])
						{  
							;
						}
						else                 //说明当前字符和之前的字符是不相等的
							break;
						
					}
					if (j == (maxlength )) //说明当前字符和之前的字符是相等的
						flag2 = 1;		  
					continue;
				}
			}
			else   //遇到非字母了,但是之前的单词没有maxlength长
			{
				i++; 
				length = 0;
			}
		}
		
		if( flag2 != 1 )  //如果当前字符和之前的字符是不相等,就将这个字符放入output中
		{
			int j = newp;
			lastpos = newp;
			lastlength =  maxlength;
			for(j =prepos; j < (prepos+maxlength); j++ )
			{
				output[newp++] = input[j];
			}
			output[newp++] = ' ';
		}
		//把这个单词去掉
		int start = prepos;
		int end = prepos + maxlength;
		
		if(input[ end]== '\0')  //如果只剩下一个空字符串了
		{
			input[ start] = input[end];
			input[start-1]='\0';
		}
		else   //把当前后面的到结尾全部往前移
		{   
			start--;
			while(input[ end]!= '\0')
			{
				input[ start++] = input[end++];
			}
			input[start]='\0';
		}
	}
	
	output[newp] = '\0';
	printf("%s\n",output);
}
int main()
{
	char input[] = "some local buses, some1234123drivers max max";
	char output[1000];
	printf("%s\n",input);
	my_word(input, output); 
	return 0;
}

字符串处理算法:双指针技巧与面试高频题解析 字符串处理是算法中的基础但重要课题,双指针技巧是其核心解决方案之一。该技术通过维护两个指针变量高效处理字符数组,时间复杂度通常为O(n),空间复杂度优化至O(1)。在工程实践中,双指针广泛应用于数据清洗、文本分析和编译器设计等场景。以LeetCode高频面试题为例,反转字符串及其变种问题考察了边界条件处理和语言特性掌握。字符串算法在各大厂笔试中出现率超过75%,特别是344反转字符串和541反转字符串II等经典题型。掌握字符串处理的核心模式,能有效提升解决实际工程问题和通过技术面试的能力。 阅读详情

相关推荐

精通字符串处理:字符与整数转换

本章深入探讨了数组和字符串问题,特别是如何高效地移除字符串中的字符、反转单词顺序以及实现字符与整数之间的转换。作者详细介绍了算法设计、效率分析以及C语言实现。通过构建查找数组来优化字符删除,使用临时缓冲区来反转字符串中的单词,并通过位值计算来实现字符串与整数之间的转换。

weixin_42443533的博客 202

华为机试—字符串中找出单词排序

题目: 在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后

小地盘的诺克萨斯 1890

异步FIFO的隐形陷阱:复位信号同步化实战解析

本文深入解析异步FIFO设计中复位信号同步化的隐形陷阱,重点分析赛灵思xpm_fifo_async原语在FPGA应用中的常见问题。通过实战代码和系统集成方案,提供复位同步化的最佳实践,帮助工程师避免跨时钟域通信故障,提升系统可靠性。

keras9composer的博客 246

华为上机笔试题(2)

#include #include #include void MyDecrease(char *minuend, char* subtrahend, char *remainder) { int mlen, slen, rlen, mdot, sdot, rdot, i, borrow, result; //获取字符串长度,假设没有小数点 mdot = mlen = strlen

子同的专栏 1254

5款高性价比LDO芯片实测对比:从TPS7A4501到LM2940,哪款更适合你的项目?

本文通过实测对比了TPS7A4501、TPS72301、LM2937、LM2940等五款高性价比LDO芯片的核心性能。文章详细分析了跌落电压、输出噪声、静态电流及热性能等关键指标,并结合电池供电物联网节点、高精度数据采集等典型应用场景,提供了清晰的选型指南,帮助工程师根据项目需求选择最合适的LDO芯片。

weixin_29305337的博客 116

循环卷积和线性卷积(矩阵视角)

矩阵视角的循环卷积核线性卷积

shengsong 3582

在给定字符串中找出单词并排序

2 字符串处理转换    问题描述:    在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出

Oliver King 的小窝 1772

2D Nesting Defining a CSV File of Part Data

若。

qq_36560674的博客 1851

在给定字符串中找出单词

 //在给定字符串中找出单词(“单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等; //另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列), //然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。 //输出的单词之间使用一个“空

风雪傲月的博客 3416

树莓派4B+Ubuntu22.04+思岚RPLIDAR C1激光雷达应用

树莓派+Ubuntu22.04+思岚RPLIDAR C1激光雷达简单应用

techfuture的博客 3705

2025资源从哪里来!

研究网络通信中的安全问题,如VLAN划分、路由协议(静态、动态如OSPF、BGP)、NAT转换、AAA认证、访问控制列表(ACL)等。‌Wi-Fi安全设置‌、‌密码破解原理‌(仅用于合法测试或教育目的)、‌常见Web安全问题‌如SQL注入、XSS跨站脚本攻击等的防范措施。在这个网站你可以找到你对应的专业-对应的路线-对应的资源-对应的百度网盘里面全是免费的资源------------------惊喜不?‌防火墙配置与策略‌、‌入侵检测与防御系统(IDS/IPS)‌、‌端口扫描与漏洞扫描技术‌等。

qq_56248592的博客 1906

程序员面试100题(算法)之把字符串转换成整数

此程序还没有判读sum是否溢出,待续。。 // 程序员面试100题(算法)之把字符串转换成整数 #include "stdafx.h" #include using namespace std; int state = 0; int ConvertStr(char *str) { int num = 0; long sum = 0; if(NULL == str) { c

shichexixi的专栏 3994

1553B总线介绍及其硬件方案设计

军用1553B总线 1.简介 简单介绍可参考(https://blog.youkuaiyun.com/ScilogyHunter/article/details/108444231)博主写的很详细。 1553B总线是MIL-STD-1553总线的简称,其中B就是BUS,MIL-STD-1553B总线是飞机内部时分制命令/响应式多路复用数据总线。1553B数据总线标准是20世纪70年代由美国公布的一种串行多路数据总线标准。1553B总线能挂31个远置终端,1553B总线采用指令/响应型通信协议,它有三种终端类型: BC:

小幽余生不加糖 1万+

面试题33:把字符串转换为整数

C语言的库函数atoi()的作用是将一个字符串转换为整数。写一个函数StrToInt,实现这一功能。

6582

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 792

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C/C++面试之算法系列--从“整数转换成字符串”看算法的联想

  【序】“将给定的一个整数转换成字符串”是面试中常见的考题,本文参考了两位优快云博友的帖子,在此感谢! 从低位开始转换,然后再翻转字符串是最容易想到的方式;先确定该整数的位数,取模运算从低位开始,将保存的位置递减,此方法无需翻转字符串,因此整体效率较高,值得借鉴。 受先确定该整数的位数的思想启发,我想取商运算从高位开始也可以,并且是顺序存储,无需翻转字符串 从获得最高位

Sailor_forever 7118

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C字符串处理函数汇总实现(面试大多会用到)

<br /> <br />如果你的简历上,写了你精通C/C++,如果让你写个字符串函数,结果写不出来,是不是很囧。<br />字符串是C中很重要的一部分,我们在编程的操作上,很多都是处理字符串的。<br />对C中的字符串你应该这样认识,它是一个结尾带'/0'的数组。不关写成<br />char *s = "nihao";<br />char s[] ="nihao";<br />char s[10] = "nihao";<br />他们在内存中都是可以认为是数组形式的存在,连续的存放,最后以'/0'结尾。

白浪的专栏 1966

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言字符与字符串函数:ctype.h 和 string.h 核心用法

本文介绍了C语言中字符与字符串处理的核心函数,分为两个部分:字符分类/转换(ctype.h)和字符串操作(string.h)。 字符处理:详细讲解了isalpha、isdigit等字符分类函数,对比了ASCII差值法和标准函数toupper的优劣,强调标准函数更安全可靠。 字符串操作:深入解析四大核心函数: strlen:详解无符号返回值的陷阱和两种实现方法(计数器/指针减法) strcpy:分析四个使用条件,给出包含断言的规范实现 strcat:说明追加原理和实现要点 比较函数(文中未展开)

hello world 308

12.面试算法-字符串常见算法题(一)

面试算法-字符串转换专题

weixin_36401695的博客 1328

H面试程序(27):字串转换

//1 字串转换 //问题描述: //将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a; //若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。 //例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。 //要求实现函数: //void co

linuxlinuxlinuxlinux的专栏 1099

字符串处理实战:从大小写转换看编程基本功与数据清洗

字符串处理是编程中的基础且核心的技术概念,广泛应用于数据清洗、格式规范化和文本分析等场景。其原理涉及字符编码、遍历算法和条件逻辑,通过高效处理字符串,可以提升程序的健壮性和性能。在技术价值上,扎实的字符串处理能力是解决复杂问题的底层支撑,尤其在数据清洗和规范化中至关重要。应用场景包括用户输入处理、日志文件解析、搜索引擎关键词格式化等。本文以一道经典的“整理药名”题目为例,深入探讨字符串大小写转换的细节,分析常见误区如边界条件处理和输入输出陷阱,并介绍性能优化方案,帮助读者锤炼编程基本功。通过理解字符编码和库

weixin_31309419的博客 256

面试题1:把一个字符串转换成数字

1题目分析: 分析方法:

chhuach2005的专栏 1152

java:实现将字符串转换成整数(附带源码)

java:实现将字符串转换成整数(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1853

LeetCode-8 字符串转换整数

题目:8. 字符串转换整数 难度:中等 分类:字符串 解决方案:字符串遍历 今天我们学习第8题字符串转换整数,这是一个字符串的中等题,像这样字符串的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们看看这道题的题目描述。 题目描述 请你来实现一个atoi函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符...

jacob2359的博客 224

面试C++题目,字符串拷贝与小写换大写

        前一个来月,一直在外面找工作,做了一些C++题目,当时感觉还行,但是回家后仔细总结后,发现原本很看似很简单的题目面试时答的不是很好,于是写了出来,和大家交流交流。         以下是字符串拷贝函数和小写换大写,这两个面试考了多次,尤其是字符串拷贝。char* my_strcpy( char *strTarget, const char *strSource ){ ASS

俺想有栋房 2695

Google面试题,excel十进制字符串转换(java)

和171题一样,只不过转换顺序颠倒,增加了难度。 题目:输入十进制,输出对应的excel字符串列 1-A ,2-B ,3-C.....26-Z ,27-AA ,28-AB 关键点:需要考虑边界值问题,当number可以除尽26和不能除尽26. 我只做出了不能除尽26的,方法是除k取余法,即十进制转换为26进制,在把26进制每一位变成对应的字符,组成字符串 package mycode;

u112222222的博客 639
上一篇: H面试程序(27):字串转换
下一篇: 在main函数内和外定义的结构体的作用范围
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值