C语言字符串用指针处理字符串
2012-10-20 18:07
225 查看
/* 用指针处理串,用串作为函数的参数 编写这个交互式小程序,它读入用户输入的一行字符作为一个串,然后程序创建新串并且打印它 程序思路: 1.先在主函数申请line字符数,在主函数调用read_in()函数,保存用户输入的数据 2.在主函数调用change()函数,进行串赋值 3.在主函数打印新串 */ # include <stdio.h> # include <stdlib.h> # include <string.h> # define MAXLINE 100 void read_in(char *); char * change(const char s[]); int main() { char line[MAXLINE];//*change(char *); 函数内部声明函数,这种方法不推荐 printf("\nWhat is you favorite line? "); //通过read_in把字符放入line,把line作为参数传给change(),该函数返回一个char指针,以串格式的printf()显示返回的值 read_in(line); //change(),该函数返回一个char指针,以串格式的printf()显示返回的值 printf("\n%s\n\n%s\n\n","Here it is after being changed :",change(line)); return 0; } //读入用户输入的程序, /* 从输入流中得到连续字符,并一个接一个地把它们放进以基地址s开始的数组中,当接收到换行符的时候,就终止循环,并 把空字符放进数组中作为串结束的标志,这个函数没有分配空间,在main()中,用line的声明分配空间。 把line作为传输传递给read_in()时,传递的是数组的基地址拷贝,参数s接收这个值,数组元素本身不被拷贝,但可在 read_in()中通过基地址访问它们 */ void read_in(char s[]) { int InputChar,i = 0; while((InputChar = getchar()) != EOF && InputChar != '\n') { s[i++] = InputChar; } s[i] = '\0'; } // 这个函数接收一个串进行复制,同时把e变成E,并用换行和跳格符代替每个空格 //由于s是参数,所以原来的 char * change(const char *s)写成下面用的 char * change(const char s[])////此函数返回 char *类型 { static char new_string[MAXLINE]; char *p = new_string; //*和++都是一元运算符,而且都是自右向左,所以*p++ = '\t' 等价于 *p = '\t';p++; //*p++ 等价于*(p++) (*p)++是增加的值的加1 *p = '\t'; //*p++ = '\t'; ++p; //赋值是求值得一部分,这使得把一个跳格符赋值给p指向的位置,因为p指向new_string的基地址,所以把跳格符赋给new_string[0] //对p增量后,p指向new_string[1] //测试s所指位置的值是否是串结束标志,如果不是就指向for循环体,并且对s进行增量, //对指向char的指针增量的作用是是指针指向数组的下一个字符 for(; *s != '\0';++s) { if(*s == 'e') { //*p++ = 'E'; *p = 'E'; ++p; } //测试是否指向空格,若是,把换行符赋给p指向的对象,并对p增量,再把跳格符赋值给p所指向的对象,并对p再次增量 else if (*s == ' ') { //*p++ = '\n'; *p = '\n'; ++p; //*p++ = '\t'; *p = '\t'; ++p; } else { //*p++ = *s; *p = *s; ++p; } } //把串的结束标志赋给p指向的对象 *p = '\0'; return new_string; } /* 若new_string 的存储类型是自动而不是静态的,分配给它的内存在函数退出时将不被保存,很多系统中这是很严重的问题 一种可能是内存被重写,并且main()中的printf()工作不正常 2011年10月20日18:06:05 于图书馆6楼 */
Microsoft Visual C++ 6.0 运行成功。
相关文章推荐
- c语言 如何用指针来处理字符串?
- c语言-指针和字符串
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
- 字符串处理函数gets()、puts()、strcmp()、strlen()、strcpy()、strcat()-C语言
- iOS开发分分钟搞定C语言—— 字符串和指针
- C语言 字符串处理函数 转自 http://blog.chinaunix.net/uid-25885064-id-3175049.html
- c语言字符指针数组经典,此后不必再担心字符串问题.
- C和指针 字符串处理
- C语言中字符串的处理
- c语言libcurl 使用实例get/post方法+c语言字符串处理
- C语言字符串处理的库函数
- C语言-指针和字符串
- 第09天C语言(03):指针和字符串的注意点
- C语言中的string.h中的内存字符串处理函数
- C语言中对字符串的操作处理
- C语言中字符串处理函数拾锦
- C语言常见的字符串处理函数
- C语言字符串处理
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- C语言字符串以及二维数组指针