首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串的处理,求教怎样写更好?该如何处理

2012-05-07 
字符串的处理,求教怎样写更好?比如题目为怎样把字符串 Hello world! This is c/c++! 里的空格数出来,并

字符串的处理,求教怎样写更好?
比如题目为怎样把字符串 "Hello world! This is c/c++! "里的空格数出来,并且处理成" Helloworld!Thisisc/c++!"?
想了半天憋出如下代码,感觉很累赘,,请教有无更好的方法?而且这里的字符串在处理的时候好不好?调试的时候常看到乱码,所幸输出没有.....

C/C++ code
#include <stdio.h>#include <stdlib.h>void main(){    char * str="Hello world! This is c/c++! ";    int i = 0;    int j = 0;    int count = 0;    int len = 0;    for(i=0; str[i] != '\0'; i++) len += 1;    char str2[50];    for(i=0; i <= len; i++)    {        if(' ' == str[i])        {            count +=1;                    }    }    for(i=0; i < count; i++)    {        str2[i] = ' ';    }    for(i=0; i <= len; i++)    {        if(' ' != str[i])        {            str2[count++] = str[i];        }    }    printf("str2 is %s ", str2); }


[解决办法]
遇到空格把后面的字符往前移。
[解决办法]
探讨

引用:

看看 <string.h>

for(i=0; str[i] != '\0'; i++) len += 1;

有标准的库函数

char * str="Hello world! This is c/c++! ";
常量字符串,不可以修改

strlen我知道,但.....
用了另外一个str2[50]来放处理后的字符串,但这也是有限的,如果处……

[解决办法]
跟2楼的思路一样,都是“遇到空格跳过,不是空格的话写到新的数组(或内存空间)去”。2楼指针用的很好。
C/C++ code
#include <stdio.h>int main(void){        char *str="Hello world! This is c/c++! ";        char *p;        int i, j, len;        len = strlen(str);        p = (char *)malloc(len + 1);        for(i = 0, j = 0; i < len; ++i) {                if(str[i] != ' ') {                        p[j] = str[i];                        j++;                }        }        printf("%s\n", p);        free(p);        return 0;}
[解决办法]
#include<iostream>
#include<string>
#include<cctype>
using namespace std;

int main()
{
string str("Hello world! This is c/c++! ");
string::iterator iter=str.begin ();
for(;iter!=str.end();){
if(isspace(*iter))
iter=str.erase(iter);
else
++iter;
}
cout<<str<<endl;
}


这是我在VS2010下写的,希望对你有帮助
[解决办法]
探讨

跟2楼的思路一样,都是“遇到空格跳过,不是空格的话写到新的数组(或内存空间)去”。2楼指针用的很好。
C/C++ code

#include <stdio.h>

int main(void)
{
char *str="Hello world! This is c/c++! ";
char *p;
int i, j, len;

……

[解决办法]
探讨


输出是"Helloworld!Thisisc/c++!烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?ZA"

估计要避免这个问题的话必须在字符串最后加一个/0了,是不?

[解决办法]
11楼的办法最方便有效。顺便补充一下:
再定义一个变量int count = 0;在循环里添加一句count++;空格个数也统计出来了。
探讨

如果可以用stl中的string的话,可以参考下面的写法:
C/C++ code

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char** argv)
{
string str = "Hello world! This is c/c++!";
size_t po……

------解决方案--------------------


C/C++ code
#include<stdio.h>#include<stdlib.h>int func(char *buf){    int cnt = 0;    char *read = buf;    while ((' ' == *read) ? (++cnt, *read++) : (*buf++ = *read++));    return cnt;}int main(){    char a[] = "Hello world! This is c/c++! ";    printf("%d\n", func(a));    printf("%s\n", a);    system("pause");    return 0;} 

热点排行