逆置字符串中的单词或者URL

本文介绍了一种将网址如www.google.com逆序为com.google.www的算法,详细讲解了通过三次逆序操作来实现该功能的过程,并提供了具体的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

数实现将网址进行如下操作
www.google.com转成com.google.www 及mail.netease.com转成com.netease.mail

不允许用STL,空间为0(1)

 

 转载请注明出处。

 

这是在论坛里看到的一道网易的面试题,跟前几天见过的一道题目很像:

 

  将字符串中的单词逆置,如

  I'm a teacher. 变成 teacher. a I'm

  标点和单词连一起,不单独分开。

 

这两道题处理方法一样,逆置URL是以“.”作为分隔标志,逆置单词则是以空格。 

 

 最简单的,最不容易出错的方法是《编程珠玑》里讲的第二种旋转字符串的方法,

 即要把字符串 “XY”左旋成 “YX”,即R为逆序操作,则YX= R(R(X)R(Y)),

也就是先将子字符串X逆序,再将子字符串Y逆序,然后将整个字符串再逆序。

 

例如:abcdefg要左旋成fgabcde,可进行如下操作

     1. 逆序abcde,得到 edcbafg

     2. 逆序fg,得到edcbagf

     3. 逆序edcbagf,得到fgabcde

 

对于一个网址 A.B.C.D.E ,要将其逆置成 E.D.C.B.A,只需要将以“.”隔开的各子

字符串逆序,再将整个网址逆序即可。代码如下:

### 如何在C语言中反转字符串 在C语言中,可以通过多种方法实现字符串的反转。下面介绍一种常见的方法:通过双指针技术完成字符串的原地反转。 #### 方法描述 此方法的核心思想是利用两个索引变量 `i` 和 `j` 分别指向字符串的第一个字符和最后一个字符。每次迭代时,交换这两个位上的字符,并逐步向中间靠拢,直到两者相遇为止[^1]。 #### 实现代码 以下是一个完整的程序示例: ```c #include <stdio.h> #include <string.h> // 定义用于反转字符串的函数 void reverse_string(char* str) { int i = 0; int j = strlen(str) - 1; // 使用循环逐个交换两端字符 while (i < j) { char temp = str[i]; str[i] = str[j]; str[j] = temp; i++; j--; } } int main() { char str[100]; // 提示用户输入字符串 printf("请输入一个字符串:\n"); fgets(str, sizeof(str), stdin); // 移除可能存在的换行符 str[strlen(str) - 1] = '\0'; // 调用反转函数处理字符串 reverse_string(str); // 输出反转后的结果 printf("反转后的字符串是:\n%s\n", str); return 0; } ``` 上述代码展示了如何读取用户的输入字符串并调用自定义的 `reverse_string()` 函数对其进行反转操作[^2]。 另一种方式可以借助指针来简化逻辑表达。例如,在某些场景下可以直接使用指针替代数组索引来访问内存中的数据项[^5]。 #### 关键点解析 - **边界条件**:当字符串长度小于等于一时无需任何动作即视为已反转。 - **时间复杂度分析**:由于只需要遍历一半序列长度因此整体效率较高O(n/2)=O(n),其中 n 表示原始串长[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值