字符串算法
字符串翻转
第一种方法:
#include <stdio.h> #include <string.h> char * reverse(char *s ,int len, char *str) { int i=0; for(;i<len;i++) { str[i] = s[len-1-i]; } return str; } int main () { char str[12] = "Hello"; int len; len = strlen(str); printf("初始字符串:%s ",str); char str1[len]; reverse(str,len,str1); printf("翻转后的字符串:%s",str1); return 0; }
第二种方法:
#include <stdio.h> #include <string.h> char *reverse(char *s) { char t, *p = s,*q = (s + (strlen(s) - 1)); while (p < q) { t = *p; *p++ = *q; *q-- = t; } return(s); } int main() { char str[] = "abcdefw"; printf("初始字符串:'%s' ",str); printf("翻转后的字符串:'%s' ", reverse(str)); return 0; }
字符串旋转
旋转分为左移和右移。
#include <stdio.h> #include <string.h> void left(char *s ,int len) { char t = s[0]; int i; for (i = 1;i<len;i++) { s[i-1] = s[i]; } s[len-1] = t; } void right(char *s ,int len) { char t = s[len-1]; int i; for (i = len - 1;i>0;i--) { s[i] = s[i-1]; } s[0] = t; } int main () { char str1[12] = "Hello"; char str2[12] = "world"; int len1,len2 ; len1 = strlen(str1); len2 = strlen(str2); //开始左移位字符串 printf("初始字符串:%s ",str1); int i = 0; for(;i<len1;i++) { left(str1,len1); printf("第%d次移位字符串的结果:%s ",i+1,str1); } //开始右移位字符串 printf("初始字符串:%s ",str2); i = 0; for(;i<len2;i++) { right(str2,len2); printf("第%d次移位字符串的结果:%s ",i+1,str2); } return 0; }
数字转字符串
#include <stdio.h> #include <string.h> //数字转换为字符串 char* hitoa(char *a,int num, int len) { int temp; int ti = num; int i = 0, j = 0; while (ti) { a[i] = ti%10 + '0'; //取最后一个数,并转换成ASCII编码值保存到字符数组中 i++; //向后移动一位,保存下一个字符 ti /= 10; //取得已经去掉几位的整数 } a[i] = '