用交换实现字符串翻转

#include<stdio.h>
char *reverse_string(char *string)
{
	char *ret = string; //保存数组的首地址
	char *left = string;//指向数组的第一个字符
	char *right;        //指向数组的最后一个非'\0'字符
	char temp;          //临时变量,用于交换

	while(*string != '\0')
	{
		string++;
	}
	right = string-1;  //执行完while后,string指向'\0',string-1即指向数组的最后一个非'\0'字符

	while(left < right)//当left=right时,说明交换完毕,第一个与最后一个,第二个与倒数第二个。。。。依次交换,完成翻转
	{
		temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
	return ret;

}
int main()
{
	char str[] = "abcd";
//	char *str = "abcd"   程序崩溃,常量字符串无法改变
	printf("%s\n",reverse_string(str));
	return 0;
}

时间: 2024-10-12 22:46:47

用交换实现字符串翻转的相关文章

CareerCup之1.2C风格字符串翻转

[题目] 原文: Write code to reverse a C-Style String. (C-String means that "abcd" is represented as five characters, including the null character.) 译文: 写代码翻转一个C风格的字符串.(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符) [分析] 这是一道经典的面试题目,虽然看似简单,但仍然有陷阱.唯一的陷阱

字符串翻转-不能使用系统函数

思想 定义头尾两个指针 交换头尾指针的数据 //字符串翻转 char *strrev(char *str){ //判断字符是否为null或是空字符串 if(str == NULL || str == '\0') { return str; } //定义char数组指针 char *start = str; char *end = str; while(*end != '\0'){ //指向最后一个结点 end ++; } //交换头和尾的值 char temp; --end; //去除\0的位置

字符串翻转,单词内不翻转

字符串翻转,单词内不翻转.如I am from Chongqing->Chongqing from am I 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 void reverse(char *str, int beg, int end); 6 void reverseSentece(char *str); 7 int main() 8 { 9 char str[128]; 10

字符串翻转

字符串翻转 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写.比如"Hello World"变形后就变成了"wORLD hELLO". 输入描述: 给定一个字符串s以及它的长度n(1≤n≤500) 输出描述: 请返回变形后的字符串.题目保证给定的字符串均由大小写字母和空格构成

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();

c/c++面试题(4)字符串翻转/打印任意进制格式/类型转换

1.字符串的翻转,这里一般是字符数组.不包括字符串字面值. char* reversal_str(char* str,size_t size); 翻转之后的字符串是原来的字符串的翻转. #include <stdio.h> #include <string.h> char* reversal(char* str,size_t len) { if(str != NULL) { char* start = str; char* end = str + len - 1; char ch;

C字符串翻转

实现字符串翻转,思路很简单,就是首尾字符对调. void reverse(char* str){ char* p = str + strlen(str) - 1;//最后一个字符地址 char temp; while (str<p) { temp = *p;//获取p指向字符串 *p-- = *str;//p 往左边移动,设置值为*str *str++ = temp; } } 注意str<p 这里,代表指针变量的大小,因为同一个字符串的地址,str指向首字母的指针变量的值,p是指向末尾字符的指

php 中文字符串翻转

php 自带的字符串翻转函数 strrev() 只支持英文,不支持中文,在网上找到了一个方法,支持中英文: <?php function reverse($str, $encode = 'UTF-8') {     $n = mb_strlen($str, $encode);     $new_str = "";     for ($i = $n; $i >= 0; $i--) {         $new_str .= mb_substr($str, $i, 1, $en

字符串翻转的两种方法(1:利用额外空间 2:交换)

#include<iostream> using namespace std; #define STRLENTH 100 char *str_reverse1(char *str) { char temp[STRLENTH];//字符数组:存放逆序后的字符 char *p = str; //字符指针:指向最后一个非'\0'字符 int i = 0; /*找到最后一个非'\0'字符并使p指向它*/ while(*p != '\0') { p++;//while循环之后p指向'\0'p--后指向数