输入一个长度不超过100的字符串,删除串中的重复字符。
生活随笔
收集整理的這篇文章主要介紹了
输入一个长度不超过100的字符串,删除串中的重复字符。
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include <stdio.h>
#include <string.h>
#define N 200
int main()
{ char a[N]; //存儲(chǔ)字符串. int i,j,n; char k; gets(a);//讀入字符串. //控制外層循環(huán)的趟次,并提供趟次號(hào)變量iint f=strlen(a); for(i=0;i<strlen(a);i++) {for(n=0;n<i;n++)//內(nèi)層遍歷從i=1開始進(jìn)入,控制各趟次內(nèi)需要執(zhí)行循環(huán)的次數(shù){if(a[i]==a[n]) //n比i更加常變:每趟比較中,i只有相同的一個(gè)值,而n由i個(gè)值.;每一趟中,i就作為一個(gè)標(biāo)桿{ //a[i] == a[n]意味著出現(xiàn)了重復(fù)字符;//下面這個(gè)循環(huán)將下一個(gè)值替代上一個(gè)值,即相當(dāng)于把位置i之后的那部分子字符串向前集體地挪了一格,從而減小重復(fù)字符串的規(guī)模for(j=i;j<f;j++){a[j]=a[j+1]; //迭代a[j] ,并對(duì)字符數(shù)組(字符串)做出了該改變(j+1)可以觸及到字符串結(jié)束符'\0' !} //i=i-1;//將這輪發(fā)生處理地循環(huán)重新執(zhí)行??/(迭代),最外層i++會(huì)加回到這個(gè)i,i -= 1;break;//直達(dá)外層for}//剛從此處離開后,n++(n將+1),之后,在這一輪發(fā)生地if將是上一輪規(guī)模地比較,不會(huì)再更改字符串了,直到外層地i++后重新開始}//剛從此處離開后,會(huì)執(zhí)行在外面一層地循環(huán)變量迭代(i++)} puts(a); return 0;
}
版本二:
#define _CRT_SECURE_NO_WARNINGS /* 題目描述 輸入一個(gè)長度不超過100的字符串,刪除串中的重復(fù)字符。輸入要檢查的字符串,長度不超過100個(gè)字符:abacaeedabcded. 輸出刪除重復(fù)字符后的字符串:abced. 樣例輸入saas 樣例輸出sa*///握手模型;最理想地輸入的比較次數(shù)規(guī)模(1+2+..+n)地規(guī)模(類似勾股數(shù)枚舉) #include <stdio.h> #include <string.h> int main() {//int a[100] = { 0 };char a[100] = { 0 };int i, j;gets(a);int len = strlen(a);for (i = 0; i < len; i++){const char tmp = a[i];if (tmp != -1){for (j = i + 1; j < len; j++){if (tmp == a[j]){a[j] = -1;}}}}for (int i = 0; i < len; i++){if (a[i] != -1){printf("%c", a[i]);}}printf("\n"); }/*失敗的彩蛋*///for (i = 0; i < len; i++) //{/*用最簡單的輸入測試:dd */ // const char tmp = a[i]; // for (j = i + 1; j < len; j++) // { // if (tmp == a[j]) // { // for (int k = j; k < len - 1; k++) // { // a[k] = a[k + 1];/*要注意:k+1<len(或說k<=len-1)*/ // } // len--; // j = i + 1; // }// }//for//}//for總結(jié)
以上是生活随笔為你收集整理的输入一个长度不超过100的字符串,删除串中的重复字符。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现手机号码归属地
- 下一篇: 半导体激光器的工作原理