26、字符串的操作
字符串的操作
一、字符串的反向輸出(逆置)
/*2017年3月17日13:18:39功能:將字符串反向輸出 */ #include"stdio.h" int main () {char a[100];char b[100];printf("please input one array: ");gets(a);char *pa = a;char *ppa = a;char *pb = b;while (*pa){pa++;}while(*ppa){pa--;*pb = *pa;pb++;ppa++;}*pb = '\0';puts(b);return 0; } /*總結:在VC++6.0中顯示的結果:——————————————————————please input one array: abcdefghhgfedcba——————————————————————*/?
二、找字符串1在字符串2中首次出現的位置
/*2017年3月16日21:10:38功能:找字符串1在字符串2中首次出現的位置 */ #include"stdio.h" int main() {int i, j, flage, m = -1;char str1[100];char str2[100];printf("please input a long string: \n");gets(str1);printf("please input a short string: \n");gets(str2);for(i = 0; str1[i] != '\0'; i++ ){for( j = 0; str1[i+j] != '\0' && str2[j] != '\0'; j++){if(str1[i+j] != str2[j])break;}if (str2[j] == '\0'){flage = 1; //此處設置的標志位很重要,對于后續以何種方式輸出做一個判斷break;}}if (flage == 1)printf("the result is %d\n", i);elseprintf("the result is %d\n", m);return 0; } /*總結:在VC++6.0中顯示的結果:————————————————————————存在的情況please input a long string:this is very goodplease input a short string:verythe result is 8不存在的情況please input a long string:asdasdfgplease input a short string:abthe result is -1———————————————————————— */?
三、找字符串中的元素
/*2017年7月1日14:39:59功能:找字符串中的元素 */ #include"stdio.h" int main() {char str[100];char ch;int flage;printf("please input a string : ");gets(str);printf("please input a character : ");ch = getchar();char *pstr = str;while(*pstr){if(*pstr != ch) pstr++;else{ flage = 1;break;}}if(flage == 1)printf("the character %c is the character of the string %s\n ",ch, str);else printf("the character %c is not the character of the string %s\n ",ch, str);if(*pstr) ;else {*pstr = ch;}*(++pstr)= '\0';puts(str);return 0; } /* 在VC++6.0中顯示的結果: ———————————————————————————————— please input a string : asdfghj please input a character : a the character a is the character of the string asdfghjasdfghjplease input a string : asdfgh please input a character : m the character m is not the character of the string asdfghasdfghm ———————————————————————————————— */?
四、統計字符串中指定子字符串的個數
/*2017年3月13日17:02:55功能:統計字符串中指定子字符串的個數 */ #include"stdio.h"int totsubstmum(char *str, char *substr);int main() {char str[100];char substr[100];printf("please input a string: ");gets(str);printf("please input its substring: ");gets(substr);printf("%d times\n",totsubstmum(str,substr));return 0;}int totsubstmum(char *str, char *substr) {int count = 0; //計數變量for ( int i = 0; str[i] != '\0'; i++) //外循環是遍歷長字符串中所有字符元素 {for (int j = 0; str[i+j] != '\0' && substr[j] != '\0'; j++) //內循環是遍歷短字符串依次比較字符串中的字符元素是否相等{if(str[i+j] != substr[j]) //如果不相等跳出內循環,遍歷外循環的下一個字符元素,break; //如果相等則比較長字符串在內循環中的下一個字符元素和短字符串的下一個字符元素是否相等}if (substr[j] == '\0') //跳出外循環的有多種情況,1、兩個字符元素沒有相同的,2、短字符串中沒有了可以繼續比較的字符元素count++;}return count; } /*總結:在VC++6.0中顯示的結果:————————————————————————please input a string: weareisisisisisgoodplease input its substring: is5 times———————————————————————— */?
五、刪除字符串中指定的字符
/*2017年3月17日13:34:09功能:刪除字符串中指定的字符 */ #include "stdio.h" int main () {char str1[100];char str2[100];char ch;printf("please input one string: ");gets(str1);printf("please input a character: ");scanf("%c",&ch);char *pstr1 = str1;char *pstr2 = str2;while (*pstr1){if(*pstr1 != ch){*pstr2 = *pstr1;pstr2++;}pstr1++;}*pstr2 = '\0';puts(str2);return 0; } /* 在VC++6.0中顯示的結果: ————————————————————————please input one string: asasasasasasaplease input a character: assssss ———————————————————————— */?
六、對字符串下標為奇數的字符按ASCII從大到小排序
/*2017年3月17日08:56:32功能:對字符串下標為奇數的字符按ASCII從大到小排序 */ #include"stdio.h" int main () {int i, j, k, n = 0, t;char a[100];char b[100];char c[100];printf("please input a string: ");gets(a);char *pa = a;char *pb = b;char *pc = c;while(*pa){pa++;n++;}for(i = 0, j = 0, k = 0; i < n; i++)if( i % 2 != 0)b[j++] = a[i];elsec[k++] = a[i];b[j] = '\0';c[k] = '\0';for(int x = 0; x < j; x++){for(int y = x; y < j; y++ ){if(b[y] >= b[x]){t = b[y];b[y] = b[x];b[x] = t;}}}for(i = 0; i < n; i++){if(i % 2 == 0){ a[i] = *pc;pc++;}else{ a[i] = *pb;pb++;}}puts(a);return 0; } /*總結:在VC++6.0中顯示的結果:————————————————————————please input a string: abcdefghahcfedgb———————————————————————— */?
七、將字符串2鏈接到字符串1的尾部
/*2017年3月17日13:10:55功能:將字符串2鏈接到字符串1的尾部 */ #include "stdio.h" int main() {char str1[100];char str2[100];printf("please input a string1: ");gets(str1);printf("please input a string2: ");gets(str2);char *pstr1 = str1;char *pstr2 = str2;while(*pstr1){pstr1++;}while(*pstr2){*pstr1 = *pstr2;pstr1++;pstr2++;}*pstr1 = '\0';puts(str1);return 0; } /*總結:在VC++6.0中顯示的結果:——————————————————————————————please input a string1: asdfghkplease input a string2: 12345asdfghk12345—————————————————————————————— */?
八、將字符串中的內容逆置
/*2017年7月1日18:01:26將字符串中的內容逆置 */ #include"stdio.h" int main () {int i, m, n = 0, t;char str[100];printf("please input a string : ");gets(str);char *pstr = str;while(*pstr){n++;pstr++;}m = n -1;for(i = 0; i < m; i++,m--){t = str[i];str[i] = str[m];str[m] = t;}puts(str);return 0; }
九、輸出字符串中指定元素的個數
/*2017年7月1日18:02:33輸出字符串中指定元素的個數 */ #include"stdio.h" int main() {int n = 0, m = 0;char str[100], b[100];char ch;printf("please input a string : ");gets(str);printf("please input a character : ");ch = getchar();char *pstr = str;while(*pstr){pstr++;m++;}for(int i = 0, j = 0; i < m; i++){if(str[i] == ch){b[j++] = i;n++;}}for(int k = 0; k < j; k++){printf("%d ", b[k]);}printf("\n");printf("%d\n", n);}?
十、字符串所有的字符左移n位,串中前n個字符移到最后
/*2017年3月13日14:12:45功能:把字符串所有的字符左移n位,串中前n個字符移到最后 */ #include "stdio.h" int main (void) {char a[100]; //定義兩個字符串空間char b[100];int m, n; //定義兩個變量,n代表將移動幾個元素printf("please input a string: ");gets(a); //此處獲取的是字符串char *pa = a; //獲取a數組的首地址,只有將數組名定義成一個指針才能進行運算操作char *pb = b; //獲取b數組的首地址char *ppb = b; //因為指針參與運算后指針會后移,但是銜接需要從字符串的第一個元素開始,此操作就是從新將指移到首部printf("please input a number: ");scanf("%d",&n);for(int j = 0;j < n ;j++) //將需要放入到a數組后面的元素放在一個新的數組b中{*pb = a[j]; //此部分操作只是將元素放入到b數組中,但是它們還不是字符串pb++;}*pb = '\0'; //因為b數組只是開辟了空間,但是若要存入字符串必須加入結尾標識符'\0'while (*pa){*pa = *(pa+n); //將第n個元素放到第一個位置pa++; //因為直至遇到結尾標識符,while()循環才會跳出來,此時指針在末尾}m = n; //此操作的目的將指針移到需要插入的位置,有幾個元素就需要向前移動幾次while (m--){pa--;}while(*ppb) //直至b數組中所有元素插入完,就結束循環,{*pa = *ppb;pa++;ppb++;}puts(a);return 0; } /*總結:在VC++6.0中顯示的結果:——————————————————————please input a string: 12345678please input a number: 345678123—————————————————————— */
十一、判斷字符串是否回文
?方法一:
/*2017年3月13日10:57:54功能:判斷字符串是否回文 */ #include "stdio.h" int main (void) {int flage;char a[100];printf ("please input a string : ");gets(a);char *pa = a;char *ppa = a;while (*ppa){ppa++;}ppa--;while(*pa){if(*pa == *ppa ){pa++;ppa--;}elseflage = 0;break;}if(flage == 0)printf("This is not Huiwen\n");else printf("This is Huiwen\n");return 0; } /*總結:在VC++6.0中顯示的結果:——————————————————please input a string : levelThis is Huiwenplease input a string : levvedThis is not Huiwen—————————————————— */?方法二:
/*2017年3月13日23:48:51功能:判斷字符串是否回文 */ #include"stdio.h" #include"string" void fun(char *); //函數聲明的類型與調用的類型一直,因為沒有需要返回到主函數的參數,故采用空類型 int main() //函數入口 {char a[100]; //定義了一個字符數組,并將其分配了100個內存空間printf("please input a string :");gets(a); //獲取字符串(此時的字符串在末尾添加了結尾標識符),注意與整型數組相區別fun(a); //fun()函數中的a是char*類型,即數組名相當一個指針被傳到fun()函數中,對字符串進行操作return 0; }void fun (char *a) //因為傳入的是char *類型,故在調用函數部分必須要用char *類型接住 {int flage; //fun()函數內部定義了一個變量for (int start_flage = 0, end_flage = strlen(a)-1; start_flage < end_flage; start_flage++,end_flage--)if(a[start_flage] == a[end_flage]) //for循環語句中也可以定義變量flage = 1;elsebreak;if(flage == 1) //設置標志位的目的是進行何種輸出printf("this is Huiwei\n");elseprintf("this is not Huiwei\n"); } /*整型數組的獲取方式有很多種:1、定義的同時可以賦初值2、如果定義的時候不賦初值,則只能用for 循環語句單個依次輸入字符數組的獲取方式1、采用gets()函數獲取2、scanf("%s",a) 注:數組名a相當于指針,也相當于變量取地址指針類似索引標記,與下標變量不同的是,下標變量只是作為標記,而指針不僅作為標記,并且對其操作會改變對應空間的內容在VC++6.0中顯示的結果:————————————————————————please input a string :levelthis is Huiweiplease input a string :WERTYHthis is not Huiwei———————————————————————— */
十二、字符串t放在字符串s的尾部
/*2017年3月13日10:48:44功能:不用strcat函數將字符串t放在字符串s的尾部 */ #include "stdio.h" int main (void) {char s[100];char t[100];printf("please input a string: ");gets(s);printf("please input a string: ");gets(t);char *ps = s;char *pt = t;while (*ps) //將指針移動到需要插入的地方{ps++;}while (*pt){*ps = *pt;ps++;pt++;}*ps = '\0'; //此時字符串s的容量擴充了,原本的結尾標識符被覆蓋,故需要重新加上結尾標識符形成新的字符串puts(s);return 0; } /*總結:在VC++6.0中顯示的結果:————————————————————————please input a string: abcdefghijkplease input a string: ASDFGTYUabcdefghijkASDFGTYU———————————————————————— */
十三、在指定的位置截取指定長度的字符串
?方法一:
/*2017年3月14日07:26:43功能:在指定的位置截取指定長度的字符串 */ #include"stdio.h" void substr(char *, int, int); //在函數聲明部分只需要注明數據類型 int main () {char s[100];int startloc, length;printf ("please input a string: ");gets(s);printf ("please input the startloc and length of subtring: ");scanf("%d %d",&startloc,&length);substr(s, startloc, length); //此時調用函數不需要注明數據類型,只需要傳入變量即可return 0; }void substr(char *s, int startloc, int length) {char *ps = s; //定義一個指針變量,目的為了找到指定位置上元素char *pps = s; //此時定義的指針變量,目的是找到數組的首地址for (int i = 0; i < startloc; i++)ps++;ps--; //循環結束后,指針還向后移動了一位,故為了找到指定位置,需要向前移動一位while (length) //因為只需要截取指定長度,故當長度為零時,跳出循環{*pps = *ps;pps++;ps++;length--;}*pps = '\0'; //但是如果想要形成一個字符串,此時必須加入結尾標識符'\0'puts(s); } /*總結:在VC++6.0中顯示的結果:——————————————————————————————please input a string: 123456789please input the startloc and length of subtring: 3 6345678—————————————————————————————— */?方法二:
#include "stdio.h" void substr(char *char, int startloc, int len); int main () {char str[100];printf ("please input a string : ");gets(str);printf("please input location and the length of substring : ");int startloc, length;scanf("%d %d",&startloc, &length);substr(str, startloc, length); }void substr(char *str, int startloc, int len) {int n = 0;char new_str[100];for (int i = startloc; len > 0; i++){new_str[n++] = str[i];len -=1;}new_str[n] = '\0';puts(new_str); }
十四、在指定的地方以及想要逆置元素個數
/*2017年3月13日08:57:37功能:在指定的地方以及想要逆置元素個數 */ #include"stdio.h" int *revese(int *, int, int); //指向函數的指針,在調用函數中數據改變,將會傳給主函數 int main() {int a[100] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };int position;int amount;printf("請輸入開始逆置位置和個數用空格隔開:"); scanf("%d %d", &position, &amount); int *b = reverse(a, position, amount); for (int x = 0; x < 10; x++) //遍歷輸出字符數組中所有的元素{printf("%d ",b[x]);} } int *reverse(int *a, int position, int amount) {int i = position - 1;int j = amount+i -1;int t;int x = amount/2;for (; x > 0; i++, j--){t = a[j];a[j] = a[i];a[i] = t;x--;}return a;} /*總結在VC++6.0中顯示的結果:————————————————————————請輸入開始逆置位置和個數用空格隔開:4 62 4 6 18 16 14 12 10 8 20 ———————————————————————— */
十五、將第m個字符后面的字符串全部存放在另外一個數組中
/*2017年3月12日08:56:37功能:將第m個字符后面的字符串全部存放在另外一個數組中(指針實現) */ #include "stdio.h" int main (void) {int m;int i = 0;char a[100];char b[100];printf("please input a string :\n"); //注意字符串的輸入要在輸入數字之前才能用gets();如果兩者之間的順序改變了,就會影響結果的輸入。gets(a);printf ("please input a number :\n"); //如果采用scanf("%s")輸入字符串是,末尾指針需要添加結尾標識符'\0'scanf ("%d",&m); char *pb = b;char *pa = a;while (*pa){i++;if(i == m)break;pa++;}while (*pa){*pb = *pa;pa++;pb++;}*pb = '\0';puts(b);return 0; } /*總結:在VC++6.0中顯示的結果:——————————————————please input a string :asdfghplease input a number :4fgh—————————————————— */十六、將第m個字符后面的字符串全部存放在另外一個數組中
/*2017年3月12日08:56:37功能:將第m個字符后面的字符串全部存放在另外一個數組中(數組實現) */ #include"stdio.h" #include"string.h" int main() {int n;char str[100];char str1[100];int j = 0;gets(str);scanf("%d", &n);for (int i = n - 1; i < strlen(str); i++){str1[j++] = str[i];}str1[j] = '\0'; //因為是字符串存入到新數組空間中,末尾沒有結尾標識'\0',故需要加入一個'\0'puts(str1); }/*總結:在VC++6.0中顯示的結果:——————————————————please input a string :asdfghplease input a number :4fgh—————————————————— */
十七、字符是否與字符串中的某個字符相同,相同不做任何操作,不同則插在字符串末尾
/*2017年3月8日23:23:43功能:字符是否與字符串中的某個字符相同,相同不做任何操作,不同則插在字符串末尾 */ #include"stdio.h" int main() {char str[100];char ch;printf("please input a string:");gets(str);printf("please input a char:");scanf("%c",&ch);char *pstr = str;while(*pstr){if(*pstr != ch){pstr++;continue;}else break;}if(*pstr);else{pstr--;*pstr = ch;} puts(str); } /*總結:在VC++6.0中顯示的結果:——————————————————————————————————please input a string:ffghjyhkkkluioplease input a char:affghjyhkkkluia—————————————————————————————————— */?
十八、把字符串的內容逆置
/*2017年3月5日14:48:11功能:把字符串的內容逆置 */#include"string.h" #include "stdio.h" #define N 81 void fun(char *s) {int i, n = strlen(s)-1; //strlen()是求字符串全部元素個數包括最后的'\0'(字符串結尾的字符),而strlen()-1表達式所求得是數組最大下標值char t;for (i = 0; i < n; i++, n--) //strlen()是求字符串的長度,注意區分它不是求數組的長度,即char型數組,不適用int型數組。{t = s[i];s[i] = s[n];s[n] = t;} } int main () {char a[N];printf ("請輸入一個字符串:\n");gets (a); //當一次輸入一個字符串時用gets()函數fun(a);printf ("修改后的字符串是: \n");puts (a); //當一次輸出一個字符串時用puts()函數 return 0; } /*總結:1、getchar ()函數的用處是輸入單個字符2、scanf ()函數的用處是輸入整數型,浮點數型的數據3、在VC++6.0中顯示的結果:————————————————————————請輸入一個字符串:asdfghj修改后的字符串是:jhgfdsa———————————————————————— */?
十九、區分字符串中的字符類型
/*2017年6月30日14:03:13功能:輸入一個字符串,將里面的數字、字母、其他符號篩選出來! */ # include <stdio.h> # include <string.h>void main(void) {char *p,str[20], sz[20], zm[20], qt[20];int i = 0, n, a, b, c;a = b = c = 0;printf("Input string:");gets(str);p = str;n = strlen(str); //求取字符串的長度,注意:strlen函數是不包括‘\0’的長度的,sizeof計算的結果才包括'\0'的長度while(i<n){if (*(p+i)>='0'&&*(p+i)<='9')sz[a++] = *(p+i);else if(*(p+i)>='a'&&*(p+i)<='z'||*(p+i)>='A'&&*(p+i)<='Z')zm[b++] = *(p+i);elseqt[c++] = *(p+i);i++;}sz[a] = '\0'; zm[b] = '\0'; qt[c] = '\0'; //添加串結束標志;printf("請輸出只含有數字的字符串:");puts(sz); //輸出數字字符;printf("請輸出只含有字母的字符串:");puts(zm); //輸出字母字符;printf("請輸出只含有其他字符的字符串:");puts(qt); //輸出其他字符 } /* 在VC++6.0中顯示的結果: -------------------------- Input string:abc52#*69JKL13 請輸出只含有數字的字符串:526913 請輸出只含有字母的字符串:bcJKL 請輸出只含有其他字符的字符串:#* -------------------------- */
?
轉載于:https://www.cnblogs.com/wxt19941024/p/7102417.html
總結
- 上一篇: CAD将图形输出成png图片的三种方法
- 下一篇: vue.js框架搭建