一些小问题,避免出现低级错误。
1、strcmp(s1,s2):
字符串指针不见‘\0‘不回头,这个常在与单个字符作比较时写着写着就忘了.
char* p_ch1="this is an example!"; char* p_ch2="h"; printf("%d ",strcmp(p_ch1+1,p_ch2); printf("%d ",strncmp(p_ch1+1,p_ch2,1));//若想比较"this is an example!"中第二个字符和"h"的关系,要用strncmp
参数是 const char* 型,因此 " " 与 ‘ ‘的区别要清楚,后者在strcmp语境下看做int。 " "的一定是个指针,‘ ‘看情况,可以看做数字ASCII码或字符,所以在C++的string::iterator中,判断 *it 用 ‘ ‘。
char *p_ch = "hehenmb"; strncmp(p_ch,‘h‘,1); //error strncmp(p_ch,"h",1);
2、strcpy(s1,s2):
将s2全部拷入s1‘处‘(不考虑内存),是在s1指针指向的位置处进行粘贴,s1处以及原来的s1后面的数据都消失,变成s2的内容。
下面是一个单词单数变复数的简单例子:
规定-y变成-ies,-ch/-sh变成-ches/-shes,其他都在原单词末尾+s。
char* WordTrans(char* ch){ if(!strcmp(ch,"y")){ strcpy(ch,"ies"); return ch; } if(!strcmp(ch,"h")){ if(!strncmp(ch-1,"c" || !strncmp(ch-1,"s"))){ //这个写法中,在比较ch-1时是单个比较 strcpy(ch+1,"es"); return ch; } else{ strcpy(ch+1,"s"); return ch; } } else{ strcpy(ch+1,"s") return ch; } } int main(){ char word[256]; scanf("%s",word); char* p_ch=word; WordCmp(p_ch+strlen(word)-1); printf("%s\n",word); return 0; }
先这样了,以后再补。
时间: 2024-12-21 08:59:31