字符串右移n位,例如 “hello world“ 右移两位 后ldhello wor

本文介绍两种字符串操作方法:一种是通过截取的方式实现字符串的旋转;另一种是利用数组处理字符串,通过移动元素达到相同效果。这两种方法都可用于解决特定类型的字符串处理问题。
 public static void main(String[] args) {

        String a = "hello world";
        System.out.println( test(a, 2));


        /*
         * 方法二:通过数组的形式,获取最后一个元素,然后把赋值给第一个,然后前一个赋值给后一个
         */
        String[] arr = {"h","e","l","l","o",",","w","o","r","l","d"};
        int count=2;
        //往后几位
        for (int j = 0; j <count ; j++) {
            //获取最后一个元素
            String str = arr[arr.length-1];
            for (int i = arr.length-1; i >0 ; i--) {
                //前一个赋值给后一个
                arr[i]=arr[i-1];
            }
            //赋值给第一个
            arr[0]=str;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }

    }


    /**
     * 方法一:通过截取的方法
     * @param str
     * @param count
     * @return
     */
    public static String test(String str,int count ){
        for (int i = 0; i <count; i++) {
            str=str.substring(str.length()-1)+str.substring(0,str.length()-1);
        }
        return str;
    }
`strstr` 函数通常用于 C 语言中,它从一个字符串中查找另一个字符串首次出现的置。但是,如果你想把 "world" 这个子串从 "hello world" 中复制到数组中,直接使用 `strstr` 并不合适,因为 `strstr` 返回的是第一次找到子串的指针,并不会实际进行复制操作。 你应该使用另一种方法,例如下面的步骤: 1. 首先,计算 "world" 在 "hello world" 中的起始置(如果 "hello world" 包含了 "world" 的完整部分)。这可以通过将 "hello world" 的长度减去 "world" 的长度并加上 "hello" 的长度得到。 2. 然后,创建一个新的数组,其大小等于 "world" 的长度,准备存储复制的内容。 3. 使用指针遍历原始字符串,从找到 "world" 开始,将每个字符复制到新数组中,直到复制完整个子串。 这里是一个简单的示例,假设我们有一个 char 类型的数组 `source` 和它的长度 `source_len`,以及一个名为 `dest` 的同样类型的数组作为目标,我们将复制 "world": ```c char source[] = "hello world"; size_t source_len = strlen(source); size_t word_pos = source_len - sizeof("world"); // 或者直接比较两者的地址差 // 创建新的数组,足够存放 "world" char dest[sizeof("world")]; char *dest_ptr = dest; // 如果 "world" 在字符串中,则开始复制 if (word_pos > 0) { memmove(dest_ptr, &source[word_pos], sizeof("world")); // 注意这里需要内存拷贝,而不是简单赋值 dest_ptr += sizeof("world"); // 移动到新复制子串的结束置 } // 目标数组现在包含了 "world" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值