#include <stdio.h> char* strcat(char,char); void sque(char, char); main() { char str1[200], str2[100]; printf("Please enter your first string:/n"); scanf("%s",str1); printf("Please enter your attached string:/n"); scanf("%s",str2); printf("The final string is /"%s/"/n", strcat(str1,str2)); sque(str1,'c'); } char* strcat(char s[], char t[]) { int i, j; i = 0; while(s[i]!='/0') i++; for(j=0;t[j]!='/0';j++) { s[i++]=t[j]; } /*注意,在操作字符串的时候,后面一点要加上s[i]='/0', 以表示字符串的结束。否则会无止境的占位,直到字符数组满了。*/ s[i]='/0'; //while((s[i++]=t[j++])!='/0') // ; /*上面的这种方法就不需要加s[i]='/0,因为隐式包含了s[i]最后一个元素是'/0'*/ return s; } /*squeeze:delete all c from s*/ void sque(char s[],char c) { int i,j; for(i=j=0;s[i]!='/0';i++) { if(s[i]!=c) { //s[j++]=s[i]; s[j]=s[i]; j++; } } /*这里一定要加上s[j]='/0',而不是s[i]='/0',因为最终的字符串是由s[j]决定的, 若是加成s[i]='/0',会导致字符数组中的部分空间没有被截掉(这个空间是删除了所有'c'字符以后空出来的空间), 而把原来字符串中的最后那部分字符又保存在这些空间里。*/ s[j]='/0'; printf("%s/n",s); } squeeze(s1, s2)函数,将字符串s2中任何与字符串s1中字符匹配的字符都删除。 #include <stdio.h> void squeeze(char, char); main() { char str1[100], str2[100]; printf("Please enter your first string:/n"); scanf("%s",str1); printf("Please enter your checking string:/n"); scanf("%s",str2); squeeze(str1,str2); printf("The modified string is /"%s/"/n",str2); } void squeeze(char s1[], char s2[]) { int i, j, k; for(i=0;s1[i]!='/0';i++) { for(j=k=0;s2[j]!='/0';j++) { if(s2[j]!=s1[i]) { //这种思想类似于不知道头结点的单链表中删除一个结点的算法 s2[k]=s2[j]; k++; } } s2[k] = '/0'; } }