前言:
眼前我们对“c语言定义一组字符串”都比较注意,小伙伴们都需要知道一些“c语言定义一组字符串”的相关资讯。那么小编也在网络上汇集了一些对于“c语言定义一组字符串””的相关文章,希望咱们能喜欢,我们快快来了解一下吧!C标准库中提供了<string.h>,里面实现了绝大多数字符串需要的操作:
1) strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2) strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
3) strlen(s1);
返回字符串 s1 的长度。
4) strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
5) strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6) strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
……
这就是库接口和数据抽象的优势,作为库使用者,我们无需知悉库开发者对接口的内部实现。
对于C风格字符格,一般的推荐做法是,除非特殊需要,尽量选择C++的string类,这样更安全。
虽然我们有了现成的库可以使用,但了解其内部实现,无疑会让我们使用起来更得心应手,同时,也能让我们更熟悉和理解C的相关语法机制。
1 求字符串长度
#include <stdio.h>int length(char *p){ int n=0; while(*p!='\0') { n++; p++; } return n;}int Strlen(const char* str){ int i=0; while(str[i]) ++i; return i;}int main(){ int len; char *str[100]; printf("please input a string:\n"); gets(str); len = Strlen(str); printf("the string has %d character.",len); system("pause"); return 0;}
也可以使用递归的方法:
int mystrlen1(const char *str) //递归{ return (*str !='\0') ? (1+mystrlen1(++str)) : 0;}2 字符串拷贝
#include <stdio.h> #include <string.h> /*==================================================================函数功能:将字符数组str2复制给一个空字符数组函数输入:空字数数组str1、字符数组str2函数输入:str1====================================================================*/char * mystrcpy(char *str1,const char *str2){ char *p = str1; if(p == NULL || str2 == NULL) { printf("The string is error!\n"); /*非法的字符串拷贝*/ exit(0); } while(*str2 != '\0') /*实现字符串的拷贝*/ { *p = *str2; p++; str2++; } *p = '\0'; /*向字符串str1中添加结束标志*/ return str1; /*返回目的字符串的头指针*/}void main() { char str1[20]; char * str2 = "Hello World"; printf("str2 string:%s\n",str2); printf("str1 string:%s\n", mystrcpy(str1,str2)); system("pause");}/*str2 string:Hello Worldstr1 string:Hello World*/3 字符串连接
3.1 算法1
#include <stdio.h>#include <stdlib.h>#include <string.h>char* Strcat(char *str1,char *str2){ int size_str1; int size_str2; int size; char *tempt,*result; size_str1=sizeof(str1); size_str2=sizeof(str2); size = size_str1 + size_str2 -4; tempt = (char*)malloc(sizeof(size)); result = tempt; while(*str1!='\0') { *tempt=*str1; tempt++; str1++; } while(*str2!='\0') { *tempt=*str2; tempt++; str2++; } //*tempt += '\0'; //不能是+= *tempt = '\0'; //*tempt = 0; //也行 return result;}int main(){ char *a = "hello"; char *b = ",everyOne!"; printf("string a: %s\n",a); printf("string b: %s\n",b); printf("字符串连接后变为:\n"); printf("%s\n",Strcat(a,b)); printf("\n"); system("pause"); return 0;}/*string a: hellostring b: ,everyOne!字符串连接后变为:hello,everyOne!*/
3.2 算法2
#include <stdio.h>#include <stdlib.h>void scat(char* p,char const* q){ while(*p) { p++; } while(*q) { *p = *q; p++; q++; } *p = 0;}int main(){ char a[32]; a[0] = 0; scat(a, "hello"); scat(a, " world"); printf("%s\n",a); system("pause"); return 0;}//hello world4 在字符串中查找字符
#include "stdio.h"#include "string.h"char *mystrstr(const char *str1, const char *str2){ char *src,*sub; if(str1 == NULL || str2 == NULL) { printf("The string is error!\n"); exit(0); } while(*str1 != '\0') { src = str1; sub = str2; do { if(*sub == '\0') { return str1; /*找到子串*/ } } while(*src++ == *sub++); str1++; } return NULL;}void main() { char * str1 = "This is a test,how to find!"; char * str2 = "test", * pos; printf("str1: \t\t%s\n",str1); printf("str2: \t\t%s\n",str2); pos = mystrstr(str1,str2); if (pos != NULL) { printf("The substring: \t%s\n",pos); } else { printf("No this substring\n"); } system("pause");}/*str1: This is a test,how to find!str2: testThe substring: test,how to find!*/5 计算某个字符在字符串中出现的次数
#include <iostream>using namespace std;int chrcnt(const char* str, int letter){ int n=0; while(*str) { if(*str==letter) ++n; str++; } return n;}void main(){ char* str ="wwuhnwu"; cout<<str<<endl; cout<<chrcnt(str,'w')<<endl; system("pause");}/*wwuhnwu3*/6 字符串比较
#include <stdio.h> #include <string.h> int mystrcmp(const char *str1,const char *str2){ if(str1==NULL || str2==NULL) { printf("The string is error!\n"); /*非法的字符串比较,程序终止*/ exit(0); } while(*str1!='\0' && *str2!='\0' && *str1 == *str2) { str1++; /*将两个字符串从头开始逐个字符进行比较*/ str2++; } if(*str1 != '\0' && *str2 == '\0') { return 1; /*字符串str2已经比较到了结尾,而字符串str1还没有到结尾*/ } else if(*str1 == '\0' && *str2 != '\0') { return -1; /*字符串str1已到结尾,而字符串str2还没有到结尾*/ } else if(*str1 > *str2) { return 1; /*字符串str1中的字符大于str2中的字符*/ } else if(*str1 < *str2) { return -1; /*字符串str1中的字符小于str2中的字符*/ } return 0; /*字符串相等,返回0*/}void main() { char str1[20], str2[20]; printf("请输入第一个字符串:\n"); scanf("%s",str1); printf("请输入第二个字符串:\n"); scanf("%s",str2); if (strcmp(str1,str2)>0) { printf("%s > %s\n", str1,str2); } else if(strcmp(str1,str2)<0) { printf("%s < %s\n", str1,str2); } else { printf("%s = %s\n", str1,str2); } system("pause");}/*请输入第一个字符串:wwu请输入第二个字符串:wwuhnwwu < wwuhn*/7 字符数组按倒序输出
#include "stdio.h"#include "string.h"/*=================================================================================函数功能:将一个字符数组按字符倒序输出,如"I am a student",输出为"tneduts a ma I";函数输入:字符数组指针、起点(0)、终点(长度-1);函数输出:1表示成功,0表示出错;=================================================================================*/int reverseStr(char *str,int begin,int end){ char tmp; if(str == NULL) { return 0; } if(begin<end) { tmp = str[begin]; str[begin] = str[end]; str[end] = tmp; reverseStr(str,begin+1,end-1); } return 1;}/*=================================================================================函数功能:函数功能:将一个字符数组中的每一个单词中的字符倒序输出,如"tneduts a ma I",输出为"I am a student";函数输入:字符数组指针;函数输出:1表示成功,0表示出错;=================================================================================*/int reverseWords(char *str){ int wordBegin=0, wordEnd=0, len=0; if(str == NULL || *str == '\0') { return 0; } len = strlen(str); reverseStr(str,0,len-1); while(wordEnd<len) { if (str[wordEnd] != ' ') { wordBegin=wordEnd; while(str[wordEnd]!=' ' && str[wordEnd]!='\0' && wordEnd<len) { wordEnd++; } wordEnd--; reverseStr(str,wordBegin,wordEnd); } wordEnd++; } return 1; }main(){ char str[20] = "I am a student" ; printf("%s\n",str); reverseStr(str,0,strlen(str)-1); printf("%s\n",str); reverseStr(str,0,strlen(str)-1); reverseWords(str); printf("%s\n",str); system("pause");}/*I am a studenttneduts a ma Istudent a am I*/8 从字符串的指定位置删除指定长度的子串
#include "stdio.h"#include "string.h"/*=========================================================函数功能:从字符串的指定位置删除指定长度的子串函数输入:字符数组指针、删除位置、长度函数输出:1表示成功,0表示错误==========================================================*/int delChars(char *str,int pos,int len){ int strLength,i,j; if(str == NULL) return 0; /*有效性判断*/ strLength = strlen(str); if(pos+len-1 > strLength || len<0 || pos<=0) { printf("Delete error\n"); /*有效性判断*/ return 0; } i = pos - 1; j = pos + len - 1; while(str[j]!='\0' && j<strLength) { str[i] = str[j]; /*删除第pos以后的len个字符*/ j++; i++; } str[strLength-len] = '\0'; /*添加字符串结束标志*/ return 1; /*操作成功*/}main(){ char str[20] = "abcdefg"; printf("The string is %s\n",str); delChars(str,3,3); printf("The string after delChars is %s\n",str); getchar();}/*The string is abcdefgThe string after delChars is abfg*/9 在字符串中查找某字符串
#include <iostream>using namespace std;char* strchr(char* str, int letter){ while((*str!=letter)&&(*str)) str++; return str;}void main(){ char* str="wwuhnwu"; cout<<strchr(str,'h')<<endl; cout<<str<<endl; system("pause");}/*hnwuwwuhnwu*/
-End-
标签: #c语言定义一组字符串 #c语言中stringh用法