int型、char*、string、的swap算法

1.俩整数,不使用中间变量交换其值:

int& intswap(int& a, int& b)
{
    b ^= a;
    a ^= b;
    b ^= a;
    return b;
}

2.C++中俩string交换字符串

string & strswap(string & a, string & b)
{
    a=a.append(b);
    b= a.substr(0,a.length()-b.length());
    a=a.substr(b.length(),a.length());
    return b;
}

3.char*字符串交换值//不使用动态内存,执行1000w次耗时2s,使用动态内存耗时3s。

//不使用动态内存:
char* cswap(char* a, char* b)
{
    int i = 0;
    int alen = strlen(a),blen= strlen(b);
    strcat(a, b);
    for (;i < alen;i++)
    {
        b[i] = a[i];
    }
    b[i] = ‘\0‘;
    for (i = 0;i < blen;i++)
    {
        a[i] = a[alen + i];
    }
    a[i] = ‘\0‘;
    return a;
}
// 使用动态内存
int charswap(char *a, char *b)
{
    char* temp=NULL;    int n = strlen(a) > strlen(b) ? (strlen(a)+1) : (strlen(b)+1);
    temp = (char*)malloc(n * sizeof(char));
    strcpy(temp, a);
    strcpy(a, b);
    strcpy(b, temp);
    free(temp);
    return 0;
}

函数调用:

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 int main(void)
 5 {
 6     clock_t start, finish;
 7     char a[100] ="hellohellohellohellohellohellohellohellohellohello";
 8     char b[60] = "hihihihihihihihihihihi";
 9     int alen = strlen(a);
10     int blen = strlen(b);
11     start = clock();
12     for (int i = 0;i < 9999999;++i)
13     {
14         cswap(a, b);
15         //charswap(a, b);
16     }
17     finish = clock();
18     double t = (finish - start)/CLOCKS_PER_SEC ;
19     cout << "costs: " << t << "s" << endl;
20     cout << "a= " << a << endl;
21     cout << "b= " << b << endl;
22     return 0;
23 }

执行结果:

时间: 2024-10-28 23:51:45

int型、char*、string、的swap算法的相关文章

C++中int型与string型互相转换(转)

http://greatverve.cnblogs.com/archive/2012/10/24/cpp-int-string.html 本以为这么多年C#经验,学个C++没多难,现在发现错了.C++真TM难.今天遇到int转string绊了半天,方法很多,不知道为什么搞那么复杂,我只挑最简单易懂的,管他效率不效率的.int转stringint n = 0;std::stringstream ss;std::string str;ss<<n;ss>>str;string转intst

Arduino中数据类型转换 int转换为char 亲测好使,itoa()函数

由于博主最近在做一个项目,需要采集不同传感器的数据,包括float型的HCHO,以及int型的PM2.5数据.但是最终向服务器上传的数据都得转换为char型才能发送,这是借鉴了一个github上面的实例实现了在Arduino上部署socket使之与服务器进行交互. github实例如下: https://github.com/washo4evr/Socket.io-v1.x-Library 在本项目中多次使用了数据类型转换,前文提到了float和double类型转换为char,如下:http:/

【c语言】编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。

/*编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数.*/ #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_string

【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。

//编写一个函数reverse_string(char * string)(递归实现) //实现:将参数字符串中的字符反向排列. //要求:不能使用C函数库中的字符串操作函数. #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_stri

char*,string,float,int 转换

char* 转 float: double atof (const char* str); /* atof example: sine calculator */ #include <stdio.h> /* printf, fgets */ #include <stdlib.h> /* atof */ #include <math.h> /* sin */ int main () { double n,m; double pi=3.1415926535; char bu

C++ 中 int,char*,string,CString之间相互转换-整理

#include <string> //使用C++标准库的string类时 using namespace std; //同上 #include <sstream> #include <iostream> #include <stdlib.h> //要将string类和int类型直接转换最好有这些包含, //因为自己写一个转换函数比较方便,函数定义参考如下 string getstring ( const int n ) { std::stringstrea

C++中将string类型变量转换成int型变量

需要的头文件:#include<sstream> 操作: string s1="124": int x; stringstream ss; ss<<s1; ss>>x; C++中将string类型变量转换成int型变量,布布扣,bubuko.com

Java中String转int型的方法以及错误处理

应要求,本周制作了一个判断一个年份是否是闰年的程序.逻辑很简单,这里就不贴代码了.可是,在这次程序编写中发现了一个问题. 在输入年份时,如果输入1)字母2)空3)超过Int上限时,就会抛exception. 问题出在String转Int型时. 首先,在java中String转换为Int主要有两种方法 1.Integer.parseInt(s) 2.Integer.valueOf(s).intValue(); 这两种方法略有不同,之后再跟大家分析. 首先我使用第一种方法,当测试数据为正常的年份时,

C语言:int型指针与char型指针本质

---恢复内容开始--- 我的理解是,不管定义时将指针定义成何种类型,指针本质上都是一个数字,其位数由编译器来决定. 比如我的编译器是32位,那么无论是定义一个char *pc还是定义一个int *pi,本质上pc与pi都是一个32位的数,但是由于"char *" 和 "int *"的限制,所以pc++是自加8bit,而pi++是自加16bit. 1 // int指针与char指针.cpp : 2 // 看看“char型指针”与“int型指针”本质上有什么区别 3