提示:字符串的有效长度就是有效字符的个数,即数组中第一个‘\\0’前面的字符个数。
#include
int i, len=0; char s[80];
printf(\请输入字符串,以回车键结束:\gets(s);
for(i=0; s[i]!='\\0'; i++) len++;
printf(\字符串%s的长度为:%d\\n\}
3. 编程:任意输入两个字符串分别保存在一维字符数组中,把第二个字符串连接到第一个字符串末尾(不用strcat函数)。例如:
Input two string:
asdfg erty
after strcat: asdfgerty
#include
int i,j;
char s1[80], s2[80];
printf(\请输入字符串1以回车键结束:\\n\gets(s1);
printf(\请输入字符串2以回车键结束:\\n\gets(s2);
for(i=0; s1[i]!='\\0'; i++) ; /* 定位第一个字符串的结束标志*/ for(j=0; s2[j] && i<80; i++, j++ ) /*将s2接到s1后*/ s1[i]=s2[j];
s1[i]='\\0';
printf(\两个串连接后:%s\\n\}
4. 编程:从键盘读入两个字符串分别保存在一维字符数中,比较两个字符串大小(不用strcmp函数),输出较大的字符串。
#include
int i;
char a[80], b[80];
printf(\请输入字符串1以回车键结束:\\n\
gets(a);
printf(\请输入字符串2以回车键结束:\\n\gets(b);
//逐个比较直到两个字符不同或其中一个字符串结束 for(i=0; a[i] && b[i] ; i++) {
if(a[i]!=b[i]) break; }
if (a[i]>b[i])
printf(\第一个字符串%s大!\\n\else if (a[i]==b[i])
printf(\两字符串相同!\\n\else
printf(\第二个字符串%s大!\\n\
}
5. 编程:任意输入一个字符串保存在一维字符数组中,判断里面数字字符的个数。例如: Input a string: adg4521gadg4adg number: 5
#include
int i, n=0; char s[80];
printf(\请输入一个字符串以回车键结束:\\n\gets(s);
for(i=0 ; s[i]; i++)
if(s[i]>='0' && s[i]<='9') n++;
printf(\字符串中包含的数字个数为:%d\\n\}
6. 编程:从一个字符串中删除从某个特定字符开始的所有字符。例如原字符串为\,特定字符为'd',删除后的字符串为\。
#include
int i, flag=0; char c, s[80];
printf(\请输入一个字符串以回车键结束:\\n\gets(s);
printf(\请输入特定字符:\c=getchar();
for(i=0 ; s[i]; i++) if(s[i]==c) {
s[i]='\\0'; flag=1; break; } if(flag==0)
printf(\输入字符中没有特定字符!\\n\ else
puts(s); }
7. 编程:编写程序,从一个输入的字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。要求:n和m都由用户输入。
#include
unsigned int i, j, m, n; char s1[80], s2[80];
printf(\请输入一个字符串以回车键结束:\\n\gets(s1);
printf(\请输入子串的起始位置和长度:\scanf(\
if( n>0 && n<=strlen(s1) ) {
if (m>0 && n+m <= strlen(s1)+1 ) {
for(i=n-1,j=0; s1[i] && i< n+m-1 ; i++, j++) s2[j]=s1[i];
s2[j]='\\0'; puts(s2); } else
printf(\长度超出范围!\\n\} else
}
printf(\起始位置超出范围!\\n\
8. 编程:利用字符串库函数puts, gets, strcat, strcmp, strcpy, strlen完成下述操作:
? 读入三个字符串str1,str2,str3 ? 输出这三个字符串
? 分别求出这三个字符串的长度; ? 比较str1和str2的大小;
? 将str2连接到str1之后,并输出连接后的str1; ? 复制str3到str1,并输出复制操作后的str1; #include
char str1[80], str2[80], str3[80];
printf(\请输入字符串str1以回车键结束:\\n\gets(str1);
printf(\请输入字符串str2以回车键结束:\\n\gets(str2);
printf(\请输入字符串str3以回车键结束:\\n\gets(str3);
printf(\三个字符串分别是:\\n\printf(\printf(\printf(\
printf(\三个字符串的长度分别是:\\n\
printf(\printf(\printf(\if(strcmp(str1, str2)>0)
printf(\字符串str1大于str2\\n\else if(strcmp(str1, str2)==0) printf(\字符串str1等于str2\\n\else
printf(\字符串str1小于str2\\n\
strcat(str1,str2);
printf(\连接到str1之后: %s\\n\strcpy(str1,str3);
printf(\复制str3到str1: %s\\n\}
选作题:
输入一个小写字母组成的英文句子,统计该句子有几个英文单词,并统计每个字母出现的次数,并将句子中每个单词的首字母大写后输出。
如:输入: this is a cat!
输出: 4个单词;
每个字母出现次数t:2 h:1 i:2 s:2 a:2 c:1 This Is A Cat!
#include
char s[80];
int count[26]={0}; //与26个字母对应,统计各个字母出现的次数 int i, j, wordnum=0, flag=0;
printf(\请输入一个英文句子(小写字母)以回车键结束:\gets(s);
for(i=0; s[i]; i++) {
if(s[i]>='a' && s[i]<='z') //逐个字母判断,使其对应的出现次数增加1 {
j=s[i]-'a'; // 计算该字母在26个字母中的序号 count[j]++; }
if(i==0 && s[i]!=' ' || flag==1) //句首单词及每个单词第一个字母的处理 {
wordnum++; //单词个数增加1 s[i]=s[i]-32; //小写换大写 flag=0; }
else if(s[i]==' ' && s[i+1]>='a' && s[i+1]<='z')
flag=1;
//当前是空格,但下一个字符是字母,则该字母一定是单词的起始字母flag=1。
//即判断一个单词的起始字符,单词间用空格区分,这里考虑了单词间多个空格的情况
}
printf(\句子中有%d个单词;\\n\printf(\每个字母出现的次数:\for(i=0; i<26; i++) {
if(count[i]!=0)
printf(\
}
printf(\
printf(\每个单词首字母大写后:\ puts(s); }