码迷,mamicode.com
首页 > 其他好文 > 详细

字符串 基础

时间:2017-12-31 13:36:24      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:ring   验证   输入输出   str1   scanf   mes   复制   一句话   []   

字符串

标签(空格分隔): @zhshh 字符串


我是C++er。。。

字符串有string(c++提供的)和cstring(从C里面带过来的)
就从我个人角度来看还是比较喜欢用string(不过听说从cstring要更快,因为只是连续的字符(char)接在一块的数组(可能不严谨))
C++ reference官方文档

下面的代码默认省略如下头文件了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;

先从cstring谈起

输入输出

cin,cout,printf,scanf都可以
printf,scanf输出占位符是%s,而字符是%c

strcpy 复制

char * strcpy ( char * destination, const char * source );
来源字符串可以使常量,也可以是cstring

int main(){
    char a[]="The char program";
    char b[40],c[40];
    strcpy(b,a);
    strcpy(c,"is successful");
    printf("%s__%s",b,c);
//  cout<<b;//cout也可以
} 

输出
The char program__is successful

strcat 连接

char * strcat ( char * destination, const char * source );
同上,来源也可以是常量或者变量

int main(){
    char a[]="The char program";
    char b[40],c[40];
    strcpy(b,a);
    strcat(b," !@#@!");
    strcpy(c,"is successful");
    printf("%s__%s",b,c);
//  cout<<b;
} 

strcmp 比较字典序

int strcmp ( const char * str1, const char * str2 );
就按照英语字典理解就行

c++reference 官方
return value indicates
result<0 the first character that does not match has a lower value in ptr1 than in ptr2
result=0 the contents of both strings are equal
result>0 the first character that does not match has a greater value in ptr1 than in ptr2
返回值 指示
<0 第一个不匹配的字符在ptr1中的值比在ptr2中的值低
0 两个字符串的内容是相等的
0 第一个不匹配的字符在ptr1中比在ptr2中有更大的值

如果字符串包含,则长的更大,否则ascii码大的更大

int main(){
    char a[50],b[40];
    while(1){
        scanf("%s%s",&a,&b);
        printf("%d\n",strcmp(a,b));
    }
} 

qwerty qwerty
0
123 1234
-1
213 21
1
a A
1
0 A
-1
注:
0 48——————A 65————————a 97
引用百度ASCII码对照表
技术分享图片
注意最后一句话,可以用小键盘验证
strcmp只与内容有关,与长短无关

int main(){
    char a[50]="aaa",b[40]="aaa";
    printf("%d",strcmp(a,b));
} 
//OUTPUT:0

其他

strchr 寻找字符

const char * strchr(const char * str,int character);
char * strchr(char * str,int character);
在C中,这个函数只声明为: 而不是C ++提供的两个重载版本。
char * strchr ( const char *, int );

strlen 取字符串长度

//来自于 c++ reference
/* strlen example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char szInput[256];
  printf ("Enter a sentence: ");
  gets (szInput);
  printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput));
  return 0;
}

Enter sentence: just testing The sentence entered is 12 characters long.

memset 内存填充

一般在cstring用的并不是很多,但是在其他地方很常用
因为他是按照内存字节填充,所以有一种说法

memset 只可以填充0或者-1
并不完全正确

比如int是4字节的,int a[100],然后memset(a,1,sizeof(a))会产生
00000001 00000001 00000001 00000001 00000001......
重复400个(4*100)
这样就是16843009(十进制)或者是0x01010101(十六进制)
比如要填充无穷大,(0x3f3f3f3f),只需memset为0x3f即可

回到c++

字符串算法相关

字符串 基础

标签:ring   验证   输入输出   str1   scanf   mes   复制   一句话   []   

原文地址:https://www.cnblogs.com/zhshh/p/string_basic.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!