1.字符数组
许多情况下,对字符串的处理使用字符数组会更加方便,比如:
我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好。
eg:给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy. ",变成"i am a little boy",语言不限,但不要用伪代码作答.
answer:
#include <iostream>
#include <string>
using namespace std;
string FormatString(char str[], int len)
{
//if (str == NULL || len <= 0)
//return;
int i = 0, j = 0;
while (str[i] == ‘ ‘)//开头的空格,通过移动索引达到删除空格的目的
i++;
while (str[i] != ‘\0‘)
{
if (str[i] == ‘ ‘ && (str[i + 1] == ‘ ‘ || str[i + 1] == ‘\0‘))//中间或者结尾的空格,判断是否有两个空格或者结尾了。用i和i+1体现了数组索引的用途
{
i++;
continue;
}
str[j++] = str[i++]; //程序核心,通过索引完成删除空格的操作,j是小于等于i的。
}
str[j] = ‘\0‘;
return str;
}
void main()
{
char ch[] = "i e.";
cout << FormatString(ch,5);
system("pause");
}
2.指针操作
在对字符串的移动进行操作时,使用指针往往会更加方便。
eg:
字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,def35adh3kjsdf7,输出为defadhkjsdf3537。answer:
#include <stdio.h>void main(){ char buf[256]; char *p=buf; //两个指针,一个负责遍历操作,一个负责存放操作后的字符串 char *q=buf; char ch; printf("Please input a string:"); scanf("%s", buf); while(*p) { while(*p<‘0‘||*p>‘9‘)p++;/*找到第一个数字*/ q=p; while(*q>=‘0‘ && *q<=‘9‘)q++;/*找到数字后面的第一个非数字的字符*/ if(*q==0) break;/*后面都是数字,退出*/ ch=*q; //把要移动的字符放在临时变量ch中 while(q>p) { *q=*(q-1); //把ch中的字符移到数字前面 q--; } *q=ch; //实现了把字符放在数字前面 } printf("Output string: %s\n",buf); printf("Press any key to exit.\n"); getch();}