#本人大一软件工程在读,妥妥的小菜鸟一枚,以下仅是我自己的学习心得,用来整理笔记用的,要是有什么错误,跪请各位大佬指正!!!🙏🙏🙏#
描述
一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。
输入
一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式。
输出
该句子中最长的单词。如果多于一个,则输出第一个
解答:这题容易忘记的一个点是:这个句子是以“.”结尾的,因此要先将末尾的句号去掉,再将句子切割标号,各部分比较长短。
代码:
#include <stdio.h>
#include <string.h>
int main(){
char sen[500],sen0[500];
char* senPtr;
char word[50][50];
int len,len0,num=0;
int i,j,n=0;
senPtr=sen;
gets(sen0);
len0=strlen(sen0);
strncpy(sen,sen0,len0-1);
senPtr=strtok(sen," ");
for(i=0;senPtr!=NULL;i++){
strcpy(word[i],senPtr);
senPtr=strtok(NULL, " ");
}
len=strlen(word[0]);
for(j=1,n=0;j<i;j++){
if(len<strlen(word[j])){
num=j;
len=strlen(word[j]);
}
else continue;
}
printf("%s\n",word[num]);
return 0;
}
我最后总结几个我自己在这段代码中的遗忘点和易错点:
1.strtok函数的运用规范和格式:
当用它分割一个句子时,基本格式:
#include <stdio.h>
#include <string.h>
int main(){
char string[] = "This is a sentence with 7 tokens";
char *tokenPtr = stroke(string, " ");
while(tokenPtr != NULL){
printf("%s\n", tokenPtr);
tokenPtr = strtok(NULL, " "); //这个NULL表示这次strtok函数调用将从上一次strtok函数调用保存的位置开始,继续对string标号化,如果调用不再能得到新的标号,则函数strtok返回NULL。
}
}
值得注意的是:每一次重新调用strtok函数,都会改变包含分隔符的字符串。因此,如果在调用函数strtok之后,程序还要使用这个字符串,则需要事先备份这个字符串的副本(用strcpy)
2.字符串指针的运用
3.二维字符串数组
4.细节决定成败!