20140902 字符串拷贝函数 右旋转字符串 string类的编写
1、strncpy字符串拷贝函数
//strncpy的程序
#include<stdio.h>
#include<assert.h>
char *strncpy1(char *strDest,const char *strSrc,int n)
{
assert((strDest!=NULL)&&(strSrc!=NULL)&&n>0);
if(strDest==strSrc)
return strDest;
char *Address=strDest;
while(n--&&(*strDest++=*strSrc++)!='\0')
//n--必须放在前面,退出循环哪一步检测到n=0时,后一个判断条件就不做了
;
*(strDest)='\0';
return Address;
} int main()
{
char strDest[]="tyua";
char strSrc[]="abcd";
char *pDest=strDest;
char *pSrc=strSrc;
strncpy1(pDest,pSrc,4);
printf("%s",pDest); }
2、右旋转字符串
//abcdef
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<malloc.h>
void ReverseString(char *str,int first,int last)
{
assert(str!=NULL&&first<=last);
int i=first,j=last;
while(i<j)
{
str[i]=str[i]+str[j];
str[j]=str[i]-str[j];
str[i]=str[i]-str[j];
i++; j--;
}
}
void RotateString(char *str,int n) //strcpy拷贝
{
assert(str!=NULL&&n>=0);
int len=strlen(str);
char *strTemp=(char *)malloc(10);//需要
strcpy(strTemp,str+len-n);
strcpy(strTemp+n,str);
strTemp[len]='\0';
strcpy(str,strTemp);
free(strTemp);
strTemp=NULL;
} void RotateString1(char *str,int n) //库函数拷贝
{
assert(str!=NULL&&n>=0);
int len=strlen(str);
char *temp=(char *)malloc(len+1);
memcpy(temp,str+len-n,n);
memcpy(temp+n,str,len-n);
memcpy(str,temp,len);
free(temp);
} void RotateString2(char *str,int n)//三次翻转
{
assert(str!=NULL&&n>0);
int len=strlen(str);
ReverseString(str,0,len-1);
ReverseString(str,0,n-1);
ReverseString(str,n,len-1); } int main()
{
char str[]="abcdef";
//RotateString(str,2);
RotateString2(str,2);
printf("%s\n",str);
}
3、string类的编写
#include<iostream>
#include<string.h>
using namespace std;
class MyString
{
public:
MyString(const char *str);
MyString(const MyString &other);
~MyString();
MyString & operator=(const MyString &stringA); void print()
{
cout<<m_str<<endl;
}
private:
char *m_str;
}; MyString::MyString(const char *str)
{
if(str==NULL)
{
m_str=new char [1];
m_str[0]='\0';
}
m_str=new char [strlen(str)+1];
strcpy(m_str,str);
}
MyString::MyString(const MyString &other)
{
int len=strlen(other.m_str);
m_str=(char*)malloc(len+1);
strcpy(m_str,other.m_str);
} MyString::~MyString()
{
delete [] m_str;
} MyString & MyString::operator=(const MyString &strA)
{
if(this==&strA)
return *this;
delete[] m_str;
int len=strlen(strA.m_str);
m_str=new char[len+1];
strcpy(m_str,strA.m_str);
return *this;
} void main()
{
char string1[]="abcd";
char string2[]="efgh";
MyString str1(string1);
str1.print();
MyString str2(string2);
str2=str1;
str2.print();
}
20140902 字符串拷贝函数 右旋转字符串 string类的编写的更多相关文章
- C语言——常用标准输入输出函数 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字符串拷贝函数 strcpy(), strncpy(), strchr(), strstr()函数用法特点
1 首先介绍几个常用到的转义符 (1) 换行符“\n”, ASCII值为10: (2) 回车符“\r”, ASCII值为13: (3) 水平制表符“\t”, ASCII值为 9 ...
- 编写实现字符串拷贝函数strcpy()完整版
有个题目编程实现字符串拷贝函数strcpy(),很多人往往很快就写出下面这个代码. void strcpy( char *strDest,char *strSrc ) { while(( *strDe ...
- python字符串、字符串处理函数及字符串相关操作
python字符串.字符串处理函数及字符串相关操作 字符串介绍 python字符串表示 Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹: >>> 'spam e ...
- JS字符串替换函数:Replace(“字符串1″, “字符串2″),
JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...
- 字符串拷贝函数strcpy写法_转
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...
- 字符串处理总结之一(C#String类)
C#(静态String类) C#中提供了比较全面的字符串处理方法,很多函数都进行了封装为我们的编程工作提供了很大的便利.System.String是最常用的字符串操作类,可以帮助开发者完成绝大部分的字 ...
- 字符串拷贝函数递归与非递归的C语言实现
初学递归的时候,觉得很抽象,不好分析,确实如此,尤其是有些时候控制语句不对,导致程序进去无限次的调用,更严重的是栈溢出.既要正确的控制结束语句,又要有正确的进入下次递归的语句,还要有些操作语句.... ...
- 嵌入式-C语言基础:实现字符串拷贝函数
自己实现一个字符串的拷贝函数 #include<stdio.h> #include<stdlib.h> #include <string.h> char * mys ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
随机推荐
- Selenium:下拉框处理(Select模块)
在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块). ...
- Compile Linux Kernel on Ubuntu 12.04 LTS (Detailed)
This tutorial will outline the process to compile your own kernel for Ubuntu. It will demonstrate bo ...
- HDU 1387 Team Queue( 单向链表 )
Team Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 记一些经常用到的linux命令
记一些经常用到的linux命令,备忘用 用清华源pip: pip install django==1.11 tensorflow==1.4.0 keras==2.0.6 -i https://pyp ...
- db2中将表中的某一字段设置为自增长
DB2可以使用generated always as identity 将某一个字段指定为自增长的字段: 这表示id自动是一个自增长的字段,它从1开始增加每次增加1.也可以通过generated 将字 ...
- 《代码大全2》读书笔记 Week 1
<代码大全2>第一.二.三章 隐喻思维在西方是一个热门的话题,隐喻的认知功能在各个学科正受到越来越多的重视,依照我的理解,其实就是以众所周知或者理解主体熟悉的事物为符号去将新事物.新概念具 ...
- 链表反转&交换链表结点
leetcode链表反转链接 要求摘要: 反转一个单链表 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-&g ...
- Sass--伪类嵌套
其实伪类嵌套和属性嵌套非常类似,只不过他需要借助`&`符号一起配合使用. a { &:link, &:visited { color: blue; } &:hover ...
- jquery实现可以中英切换的导航条
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- 使用 jQuery 实现当前页面高亮显示的通栏导航条
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...