鱼C论坛

 找回密码
 立即注册
查看: 60|回复: 2

[已解决]输入一串字符串,实现将字符串反序存放,要求不能使用strlen()函数

[复制链接]
发表于 2024-9-12 00:18:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 轻语远歌 于 2024-9-12 00:21 编辑

使用C语言输入一串字符串,实现将字符串反序存放,要求不能使用strlen()函数
最佳答案
2024-9-13 17:22:09
球最佳
要在C语言中实现一个字符串的反转,同时不使用strlen()函数来获取字符串的长度,你可以通过遍历字符串直到遇到空字符(\0)来手动计算字符串的长度,并在遍历过程中同时反转字符串。


#include <stdio.h>  
  
void reverseString(char *str) {  
    if (str == NULL) return; // 检查空指针  
  
    int length = 0; // 初始化长度计数器  
    // 计算字符串长度,并找到最后一个字符  
    char *end = str;  
    while (*end != '\0') {  
        end++;  
        length++;  
    }  
  
    // 使用两个指针从字符串的两端开始向中间遍历,交换字符  
    char *start = str;  
    char temp;  
    for (int i = 0; i < length / 2; i++) {  
        temp = *start;  
        *start = *(end - 1 - i);  
        *(end - 1 - i) = temp;  
        start++;  
    }  
}  
  
int main() {  
    char str[] = "Hello, World!";  
    printf("Original string: %s\n", str);  
  
    reverseString(str);  
  
    printf("Reversed string: %s\n", str);  
  
    return 0;  
}
这段代码首先定义了一个reverseString函数,它接收一个字符指针(即字符串)作为参数。函数内部,首先检查这个指针是否为NULL,以避免潜在的空指针解引用错误。然后,使用一个for循环来遍历字符串直到遇到空字符(\0),同时记录下字符串的长度,并找到字符串的最后一个字符。

接下来,使用两个指针(start和end)分别从字符串的开头和结尾开始,逐步向中间移动,并在移动过程中交换这两个指针所指向的字符。这个交换过程一直进行到两个指针相遇或错过彼此(对于奇数字符串长度的情况)。

最后,在main函数中,我们定义了一个字符串str,调用reverseString函数来反转它,并打印反转前后的字符串以验证结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-12 00:18:30 | 显示全部楼层
鱼油你好!实现将字符串反序存放且不使用 `strlen()` 函数,可以使用双指针法。下面是一个Python实现的示例:
def reverse_string(s):
    # 将字符串转为列表,因为字符串是不可变的
    str_list = list(s)
    left, right = 0, len(str_list) - 1
    
    # 双指针法交换两端的字符
    while left < right:
        str_list[left], str_list[right] = str_list[right], str_list[left]
        left += 1
        right -= 1
    
    # 将列表转换回字符串
    return ''.join(str_list)

# 测试
input_str = "FishC.com"
reversed_str = reverse_string(input_str)
print(reversed_str)  # 输出: moc.CsihF

希望这个示例能帮助你理解如何不使用 `strlen()` 反转字符串。如果你有其他问题,随时提问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-13 17:22:09 | 显示全部楼层    本楼为最佳答案   
球最佳
要在C语言中实现一个字符串的反转,同时不使用strlen()函数来获取字符串的长度,你可以通过遍历字符串直到遇到空字符(\0)来手动计算字符串的长度,并在遍历过程中同时反转字符串。


#include <stdio.h>  
  
void reverseString(char *str) {  
    if (str == NULL) return; // 检查空指针  
  
    int length = 0; // 初始化长度计数器  
    // 计算字符串长度,并找到最后一个字符  
    char *end = str;  
    while (*end != '\0') {  
        end++;  
        length++;  
    }  
  
    // 使用两个指针从字符串的两端开始向中间遍历,交换字符  
    char *start = str;  
    char temp;  
    for (int i = 0; i < length / 2; i++) {  
        temp = *start;  
        *start = *(end - 1 - i);  
        *(end - 1 - i) = temp;  
        start++;  
    }  
}  
  
int main() {  
    char str[] = "Hello, World!";  
    printf("Original string: %s\n", str);  
  
    reverseString(str);  
  
    printf("Reversed string: %s\n", str);  
  
    return 0;  
}
这段代码首先定义了一个reverseString函数,它接收一个字符指针(即字符串)作为参数。函数内部,首先检查这个指针是否为NULL,以避免潜在的空指针解引用错误。然后,使用一个for循环来遍历字符串直到遇到空字符(\0),同时记录下字符串的长度,并找到字符串的最后一个字符。

接下来,使用两个指针(start和end)分别从字符串的开头和结尾开始,逐步向中间移动,并在移动过程中交换这两个指针所指向的字符。这个交换过程一直进行到两个指针相遇或错过彼此(对于奇数字符串长度的情况)。

最后,在main函数中,我们定义了一个字符串str,调用reverseString函数来反转它,并打印反转前后的字符串以验证结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 15:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表