C语言风格字符串
字符串的长度:
C语言风格的字符串末尾有一个‘\0’。比如: char * = "HelloWorld"; 在堆内存中会有一个字符数组,它存储的是“HelloWorld”末尾有一个“\0” 在栈内存中会有一个字符指针,名字为str指向字符数组0号位置的字符‘H’ 如下图所示:
那么如何求字符串的长度呢?定义一个指针p指向0号位置,然后再定义一个变量初始化为0;把指针p不断往后移动,移动的过程中将那个变量不断加一;最终p所指向的字符是’\0’;这时候停止循环返回定义的变量的值。
求字符串的长度的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const
int Max=
32;
int strLength(
char*
str){
int count=
0;
char* p=
str;
while(*p++){
count++;
}
return count;
}
int main(
int argc,
char **argv) {
char*
str=(
char*)malloc(sizeof(
char)*Max);
scanf(
"%s",
str);
printf(
"%d %d\n",strLength(
str),strlen(
str));
return 0;
}
字符串的拷贝:
当考虑目标字符串dest比源字符串src短时:
当考虑目标字符串dest比源字符串src长时:
求字符串的拷贝的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int Max=
32;
void strCopy(
char* dest,
char* src){
char* p=dest;
char* q=src;
while(*p++=*q++){
}
}
int main(
int argc,
char **argv) {
char* dest=(
char*)
malloc(Max*
sizeof(
char));
char* src=(
char*)
malloc(Max*
sizeof(
char));
gets(dest);
gets(src);
strCopy(dest,src);
printf(
"%s\n",dest);
free(dest);
free(src);
dest=(
char*)
malloc(Max*
sizeof(
char));
src=(
char*)
malloc(Max*
sizeof(
char));
gets(dest);
gets(src);
strcpy(dest,src);
printf(
"%s\n",dest);
free(dest);
free(src);
return 0;
}
字符串的连接:
首先要保证目标串的尾部,有足够的空间容纳源字符串;步骤:1.求目标字符串的长度2.将源字符串复制到目标串的尾部
字符串的连接的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int Max=
32;
void strCat(
char* dest,
char* src){
int len=
strlen(dest);
char* p=dest+len;
strcpy(p,src);
}
int main(
int argc,
char **argv) {
char* dest=(
char*)
malloc(Max*
sizeof(
char));
char* src=(
char*)
malloc(Max*
sizeof(
char));
gets(dest);
gets(src);
strCat(dest,src);
printf(
"%s\n",dest);
free(dest);
free(src);
dest=(
char*)
malloc(Max*
sizeof(
char));
src=(
char*)
malloc(Max*
sizeof(
char));
gets(dest);
gets(src);
strcat(dest,src);
printf(
"%s\n",dest);
free(dest);
free(src);
return 0;
}
字符串的比较:
原则:相等返回0,小于返回-1,大于返回1方法:1.定义两个指针,分别指向两个字符串2.两个指针往后移动,直到指向的连个字符不相等时比较大小3.当都指向了末尾,且之前的都相等,则返回0;4.当长度不相等,且两个指针有一个指向的’\0’,则长度长的大
字符串的比较的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int Max=
32;
int strCompare(
char* s1,
char* s2){
char* p=s1;
char* q=s2;
while(*p==*q&&*p&&*q){
p++;
q++;
}
if(*p-*q==
0){
return 0;
}
else{
return *p>*q?
1:-
1;
}
}
int main(
int argc,
char **argv) {
char* s1=(
char*)
malloc(Max*
sizeof(
char));
char* s2=(
char*)
malloc(Max*
sizeof(
char));
gets(s1);
gets(s2);
printf(
"%d\n",strCompare(s1,s2));
free(s1);
free(s2);
s1=(
char*)
malloc(Max*
sizeof(
char));
s2=(
char*)
malloc(Max*
sizeof(
char));
gets(s1);
gets(s2);
printf(
"%d\n",
strcmp(s1,s2));
free(s1);
free(s2);
return 0;
}
字符串的大小写转换:
大写转化为小写:指针指向的字符加上32小写转化为大写:指针指向的字符加减32
字符串的大写转化为小写:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int Max=
32;
void strLower(
char* s){
char* p=s;
while(*p){
if(*p>=
'A'&&*p<=
'Z'){
*p+=
32;
}
p++;
}
}
int main(
int argc,
char **argv) {
char* s=(
char*)
malloc(Max*
sizeof(
char));
gets(s);
strLower(s);
printf(
"%s\n",s);
free(s);
s=(
char*)
malloc(Max*
sizeof(
char));
gets(s);
strlwr(s);
printf(
"%s\n",s);
free(s);
return 0;
}
字符串的小写转化为大写:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int Max=
32;
void strUper(
char* s){
char* p=s;
while(*p){
if(*p>=
'a'&&*p<=
'z'){
*p-=
32;
}
p++;
}
}
int main(
int argc,
char **argv) {
char* s=(
char*)
malloc(Max*
sizeof(
char));
gets(s);
strUper(s);
printf(
"%s\n",s);
free(s);
s=(
char*)
malloc(Max*
sizeof(
char));
gets(s);
strupr(s);
printf(
"%s\n",s);
free(s);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-658565.html