实现 reverse(const char *s1 , char *s2)

题目:

将字符串s1的内容反转后输出到s2,比如s1="12345678",则输出s2为"87654321",实现语言选择一种即可。

 C语言实现时要求不能使用包括strlen在内的任何库函数,也不能定义和使用除s1、s2以外的其它变量。使用如下原型的C函数void reverse(const char *s1, char *s2);

总结:

如果是定义的字符串常量的话,默认类型是const类型的,也就说是如果我们把字符传直接传进去,类型是const,也就是无法修改的!!!

字符串常量 char *p1 = "1234" ;  字符串变量 = char p1[] = "1234‘;

注意在传参数的时候,最好传入字符数组的首地址,而不是把整个字符串传进去 

在翻转的时候,再另外创建一个数组指向s2,这样再赋值,如果直接移动s2,原来的首地址不好找回

 1 #include<iostream>
 2 #include<string>
 3 #include<iomanip>
 4 #include<map>
 5 #include<vector>
 6 #include<cmath>
 7 #include<list>
 8 #include<stdlib.h>
 9 #include<ostream>
10 #include<set>
11 #include<queue>
12 #include<stack>
13 #include<cstring>
14 #include<deque>
15 using namespace std;
16
17 # define ll long long
18 # define ull unsigned long long
19 # define inf 0x3f3f3f3f
20 # define ll_inf (1ll<<60)
21 const int maxn = 2e2 + 100;
22
23 void reverse( const char *s1,char *s2)
24 {
25     int len,j;
26
27     for( len = 0; s1[len] != ‘\0‘; len++);
28     int i ;
29     char *tmp = s2;
30     for( i =0 ; i < len ; i++)
31     {
32
33         char u =s1[len -i -1];
34         cout << u << endl;
35         *tmp = u;
36         tmp++;
37     }
38     cout << s2 << endl;
39 }
40
41 int main()
42 {
43     char p[] = "1234";
44     char t[] = "4567";
45     reverse(p,t);
46
47     return 0;
48 }

原文地址:https://www.cnblogs.com/letlifestop/p/11511069.html

时间: 2024-10-09 00:40:22

实现 reverse(const char *s1 , char *s2)的相关文章

char * 与char []探究理解

问题引入 以前一直认为二者是一样的,今天突然发现他们还是有很大的不同的.例如char *a = "abc"和char b[] = "abc",当我使用strcat(b,a)时得到的b是二者的结合,当我使用strcat(a,b)时系统报错.也就是说前者改变其内容程序是会崩溃的,而后者完全正确. 预备知识 内存分配的三种方式方式:静态存储区.堆区和栈区.它们的功能不同,使用方式也就不同. 1.静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存

hdu 2203 亲和串(给两个字符串s1,s2,问s2可不可能出现在以s1为循环节的串中)

1.strcat函数,strcat(char *s , char *p);注意这里的s和p所指内存区域不可以重叠且s必须有足够的空间来容纳p的字符串 2.strcpy函数,strcpy(char *s,char *p),将p拷贝到s 3.代码: #include<cstdio> #include<cstring> using namespace std; char s1[1000000],s2[100005],t[1000000]; int len1,len2; //int LCP

C 在一个字串s1中查找一子串s2,若存在则返回s1中s2的个数和位置

在一个字串s1中查找一子串s2,若存在则返回s1中s2出现次数和位置 #include<stdio.h> #include<string.h> void main() { char s1[100],s2[10]; int i,j,k,len1,len2,b[10]; gets(s1); gets(s2); len1=strlen(s1); len2=strlen(s2); for(i=0,k=0;i<len1;i++) { for(j=0;j<len2;j++) if(

Hash——字符串匹配(求s1在s2中出现的次数)

题目描述: 这是一道模板题. 给定一个字符串 A 和一个字符串 B ,求 B 在 A  中的出现次数.A 和 B中的字符均为英语大写字母. 求A 在 B 中出现了几次.(可重叠) 样例输入: 3 BAPC BAPC AZA AZAZAZA VERDI AVERDXIVYERDIAN 样例输出: 1 3 0 首先要知道什么是字符串hash(滚动哈希): 单哈希可以O(m)的时间计算长度为m的字符串的哈希值,但对于本题,总的时间复杂度没有改观.时间会爆. 这时我们就需要一个叫做滚动哈希的优化技巧.

strncpy(char* s1,const char *s2,int n) 和 strchr(cosnt char *s,char c)

1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char s1[10] = "abcd"; 6 char s2[10] = "ABCDEF"; 7 printf("s1 = %s\ns2 = %s\n",s1,s2); 8 strncpy(s1,s2,3); 9 printf("s1 = %s\ns2 = %s\n",s1,s2);

对于char *s1 和 char s2[] 的认识

对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误. char *s1 = "hello"; char s2[] = "hello"; [区别所在] char *s1 的s1,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错. char s2[]的s2 是数组对应着一块内存区域,其地址和容量在生命期里不会改变,只有数组的内容可以改

【C++】int、const char*、char*、char、string之间的转换

#include "stdafx.h" #include<string> #include<vector> #include<iostream> #include<sstream> #include<stdio.h> #include<stdlib.h> using namespace std; //sstream string int2str1(int n){ ostringstream oss; oss <

深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成 const(char *)*p,因为在定义是"()"是表示函数. 三.深入理解7种组合 (0)程序 在执行时为其开辟的空间皆在内存(RAM)中,而RAM里的内存单元是可读可写 的:指针只是用来指定或定位要操作的数据的工具,只是用来读写RAM里内存单元的工作指针 .若对指针不加任何限定,程序中一个指针可以指向RAM中的任意位置(除了系统敏感区,如操作系统内核所在区域)并对其指向的内存单元进行读和写

理解C/C++中const char*、char* const、const char* const、char* const*等等

先说些题外话,今天学习execve(2)的使用,由于书上代码使用的是C89标准,所以下面这种代码都被我修改了 char* s[] = { "aaa", "bbb", "cc" }; 也就是在char前面加个const,因为"aaa"."bbb"."cc"都是字符串字面值(string literal),在C++标准中string literal只能转换成const char*,原因是即使