1、去掉字符串结尾的空格
思路:要去掉字符串最右面的空格,而不能去掉字符串中间的空格
不能从前往后数,从后往前数,遇到不是空格的字符就把这个字符的下一个字符设置为0
#include <stdio.h>
int main()
{
char a[100] = "hello abc world ";
int index = 0;
while (a[index]) //将下标移至字符串结尾
{
index++;
}
int i;
for(i=index - 1;i>=0;i--)
{
if(a[i] != ' ')
{
a[i+1]=0;
break;
}
}
printf("(%s)\n",a);
return 0 ;
}
输出结果:
2、求一个字符串中汉字的个数
#include <stdio.h>
#include <string.h>
int main()
{
char a[100] = "hello你好啊bcworld你好我好大家好";
int sum = 0;
int index = 0;
while (a[index])
{
if (a[index] < 0) // 汉字的ASCII码是负的,如果使用UTF-8,那么一个汉字将有是哪个负数
{
sum++;
}
index++;
}
printf("sum = %d\n",sum / 3);
return 0 ;
}
输出结果:
3、字符串解题
int main()
{
char a[100] = "43*56=";
int i, j;
char c;
sscanf(a, "%d%c%d=", &i, &c, &j);//从字符串里面把想得到的字符或者整数提取出来
//printf("%d, %c, %d\n", i, c, j);
int res = 0;
switch(c)
{
case '+':
res = i + j;
break;
case '-':
res = i - j;
break;
case '*':
res = i * j;
break;
case '/':
res = i / j;
break;
default:
res = 0;
}
sprintf(a, "%d%c%d=%d", i, c, j, res);
printf("%s\n", a);
return 0;
}
输出结果:
4、字符串中同时解多道题
#include <stdio.h>
#include <string.h>
int main()
{
char a[100] = "12+5=;45-2=;34*2=;56/3=";
char b[100] = { 0 };
char *s = strtok(a, ";"); //将字符串分解为一组字符串
while(s)
{
//printf("%s\n", s);
int i, j;
char c;
sscanf(s, "%d%c%d=", &i, &c, &j); // 从字符串里面把想得到的字符或者整数提取出来
int res = 0;
switch(c)
{
case '+':
res = i + j;
break;
case '-':
res = i - j;
break;
case '*':
res = i * j;
break;
case '/':
res = i / j;
break;
default:
res = 0;
}
char tmp[10] = { 0 };
sprintf(tmp, "%s%d;", s, res);
strcat(b, tmp);
s = strtok(NULL, ";");
}
strcpy(a, b);
printf("%s\n", a);
return 0;
}
结果输出: