第13周项目5-去除字符数组中的空格

本文介绍了一个简单的C++程序,用于去除字符数组中的空格。通过遍历字符数组并仅复制非空格字符到同一数组的不同位置来实现这一目标。

问题及代码:

/* 
*Copyright (c)2014,烟台大学计算机与控制工程学院 
*All rights reserved. 
*文件名称:sentence.cpp 
*作    者:单昕昕 
*完成日期:2014年11月23日 
*版 本 号:v1.0 
* 
*问题描述:去除字符数组中的空格。
*程序输出:去除空格后的字符数组。
*/  
#include<iostream>
using namespace std;
int main()
{
	char str1[50]="Attack on titan";
	int i,j;
	i=j=0;
	while(str1[i]!='\0')
	{
	  if(str1[i]!=' ')  //遇到不是空格才复制
	  {
	    str1[j]=str1[i];
	    j++;
	  }
	i++;
	}
	str1[j]='\0';  //不要忘记这个!!!
	cout<<"去除空格后的字符串:"<<str1<<endl;
	return 0;
}


 

运行结果:

 

知识点总结:

去除字符数组中的空格。

 

学习心得:

遇到不是空格才复制,这样就能去除空格~\(≧▽≦)/~啦

<think> 首先,用户的问题是:“00-FF-00-45-DE-35 online”的字节数,存放到字符数组里。这似乎是关于计算一个字符串的字节数并将其放入字符数组。 关键点: - 字符串是:"00-FF-00-45-DE-35 online" - 我需要计算这个字符串的字节数。 - 然后,讨论如何将其存放到字符数组中。 字符串:"00-FF-00-45-DE-35 online" 让我先计算这个字符串的长度。字符串包括: - "00-FF-00-45-DE-35":这是MAC地址格式,有5个字节组(00, FF, 00, 45, DE, 35),每个组2字符,加上5个连字符,所以是6*2 + 5 = 12 + 5 = 17字符。 - 然后空格:" " - 然后"online":6字符。 所以总字符数:17 (MAC部分) + 1 (空格) + 6 ("online") = 24字符。 现在,字节数取决于编码。在C语言中,字符数组通常使用ASCII编码,每个字符占1字节。所以字节数应该等于字符数,即24字节。 确认字符串: - "00-FF-00-45-DE-35":位置:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16(索引从0) - '0','0','-','F','F','-','0','0','-','4','5','-','D','E','-','3','5' — 17字符?等一下,我数错了。 - 00-FF-00-45-DE-35:组:00(2)、-(1)、FF(2)、-(1)、00(2)、-(1)、45(2)、-(1)、DE(2)、-(1)、35(2)— 所以字符:2+1+2+1+2+1+2+1+2+1+2 = 计算:2(00) +1 +2(FF) +1 +2(00) +1 +2(45) +1 +2(DE) +1 +2(35) = 2+1=3; +2=5; +1=6; +2=8; +1=9; +2=11; +1=12; +2=14; +1=15; +2=17。是的,17字符。 - 空格:1字符 - "online":o,n,l,i,n,e — 6字符 总:17+1+6=24字符。 在ASCII编码中,每个字符1字节,所以字节数为24。 现在,存放到字符数组中: - 在C语言中,字符数组需要容纳字符串和一个空终止符'\0'。 - 所以,数组大小应为25字节:24个字符 + 1个空字符。 例如: char array[25] = "00-FF-00-45-DE-35 online"; 或者动态分配。 但问题只是说“存放到字符数组里”,不指定语言,但上下文可能是指C或类似语言。 用户的问题是中文,所以回答应该用中文。 现在,根据指令,我必须在回答后提出3-5个相关问题,以"§§相关问题§§"开头。 回顾指令: - 回答完问题后,必须提出3-5个相关问题。 - 第一必须输出"§§相关问题§§"完整。 - 禁止换分散;相关问题应该在同一后列出?不,示例中是换列出的,但说“禁止换分散”可能意味着不要在不该换的地方换。在示例中,是: §§相关问题§§ 1. ··· 2. ··· 3. ··· 所以应该是:输出"§§相关问题§§"后换,然后列出问题。 “禁止换分散”可能是指不要在问题列表中随意换,应该每一个或类似。示例中是每一个数字。 现在,构建回答: 1. 解释字符串和字节数。 2. 解释如何存放到字符数组。 回答结构: - 先计算字节数:24字节(不包括空终止符),但数组大小需要25- 然后给出代码示例。 由于是中文,我应该用中文回答。 最终回答: 字符串"00-FF-00-45-DE-35 online"的字符数为24(包括空格),在ASCII编码下,字节数为24。存放到字符数组中时,需要额外一个字节用于空终止符'\0',因此数组大小应为25字节。 例如,在C语言中: char mac_str[25] = "00-FF-00-45-DE-35 online"; 或者更安全地使用strcpy。 但问题可能只是关于大小。 现在,提出相关问题: 基于用户的问题和我的回答,想3-5个相关问题。 用户问题:字节数,存放到字符数组。 我的回答:涉及字符串长度、编码、数组大小。 相关问题: 1. 如果字符串包含非ASCII字符,字节数会如何变化? 2. 在C语言中,如何动态分配字符数组来存储这个字符串? 3. 为什么需要在字符数组末尾添加空终止符? 4. 如何计算字符串的长度而不包括空终止符? 5. 如果使用宽字符(wchar_t)数组,大小会如何变化? 确保3-5个。 现在,输出格式: - 先回答。 - 然后"§§相关问题§§" - 然后列出1. 2. 3. ... 在代码部分,如果有代码,用```括起来,但这里可能不需要代码,但可以给一个简单示例。 在回答中,我可以给出代码。 完整响应: ### 字符串字节数及字符数组存储 字符串 "00-FF-00-45-DE-35 online" 包含以下字符: - MAC 地址部分 "00-FF-00-45-DE-35":17 个字符(6 组十六进制数,每组 2 字符,5 个连字符) - 空格:1 个字符 - "online":6 个字符 总字符数:17 + 1 + 6 = 24 个字符。 在 ASCII 编码下,每个字符占用 1 字节,因此字符串的字节数为 24 字节。 存放到字符数组中时(如在 C 语言中),需要为字符串末尾的空终止符 '\0' 额外分配一个字节。因此,字符数组的大小应为 25 字节。 #### 示例代码(C 语言): ```c #include <stdio.h> #include <string.h> int main() { char str[] = "00-FF-00-45-DE-35 online"; // 自动大小为 25 字节(包括 '\0') // 或者显式指定大小 char array[25] = "00-FF-00-45-DE-35 online"; printf("字符串长度: %zu\n", strlen(str)); // 输出 24 printf("数组大小: %zu\n", sizeof(str)); // 输出 25 return 0; } ``` ### 注意事项: - 如果使用其他编码(如 UTF-8),字节数可能不同,但此字符串只包含 ASCII 字符,所以字节数不变。 - 在内存中存储时,数组大小必须包括终止符,否则可能导致缓冲区溢出。 §§相关问题§§ 1. 如果字符串中包含 Unicode 字符(如中文),在 UTF-8 编码下字节数如何计算? 2. 在 C 语言中,使用 `strcpy` 函数复制字符串到字符数组时需要注意哪些安全问题? 3. 如何在不使用标准库的情况下,手动计算字符串的长度并存储到字符数组? 4. 对于 MAC 地址 "00-FF-00-45-DE-35",如果去除连字符并存储为十六进制数组,字节数是多少? 5. 在 Java 或 Python 中,字符串的存储方式与 C 语言的字符数组有何不同? </think> ### 字符串字节数及字符数组存储分析 字符串 `"00-FF-00-45-DE-35 online"` 的字节数计算和存储到字符数组的方法如下: #### 1. **字节数计算** - **字符串组成**: - `00-FF-00-45-DE-35`(MAC 地址格式,17 字符) - 空格(1 字符) - `online`(6 字符) **总字符数:24 字符**。 - **字节数规则**: 在 ASCII 或 UTF-8 编码下(此字符串仅含 ASCII 字符),每个字符占 **1 字节**。 **总字节数:24 字节**(不包括终止符)。 - **存储需求**: 存放到字符数组时(如 C 语言),需额外 1 字节存储空终止符 `\0`。 **字符数组最小大小:25 字节**。 #### 2. **存放到字符数组的示例(C 语言)** ```c #include <stdio.h> #include <string.h> int main() { // 定义字符数组(大小 25 字节) char mac_array[25]; // 复制字符串到数组(自动添加 '\0') strcpy(mac_array, "00-FF-00-45-DE-35 online"); // 验证字节数 printf("字符串长度: %zu\n", strlen(mac_array)); // 输出 24(内容字节数) printf("数组大小: %zu\n", sizeof(mac_array)); // 输出 25(总分配字节数) return 0; } ``` #### 3. **关键说明** - **空终止符必要性**:字符数组以 `\0` 结尾,否则函数如 `printf` 可能读取越界。 - **编码影响**:若字符串含非 ASCII 字符(如中文),UTF-8 编码下字节数会变化,但本例无此问题。 - **内存布局**: 数组内容(十六进制): ``` '0','0','-','F','F','-','0','0','-','4','5','-','D','E','-','3','5',' ','o','n','l','i','n','e','\0' ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值