求解一道题。。。

zhizinianhua 2011-10-02 08:22:09
编写函数fun,其功能是:在字符串中所有数字字符前加一个“*”字符,要求通过指针实现.


希望不要用链表之类的
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinanxyj 2011-10-04
  • 打赏
  • 举报
回复
#include <cstring>
#include <iostream>
using namespace std;

char *fun(char* s){
int i,j;
int len = strlen(s);
for(i=0;i<len;i++){
if((*(s+i))>='0'&& (*(s+i))<='9'){
for(j=len;j>i;j--){
*(s+j+1) = *(s+j);
}
*(s+j+1) = *(s+j);
*(s+i) = '*';
i++;
len++;
}
}
return s;
}

int main(){
char str[100] = "12345623345";
fun(str);
cout << str <<endl;
return 0;
}
OnMyWay2010 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 we_sky2008 的回复:]
引用 2 楼 we_sky2008 的回复:
C/C++ code


#include<stdio.h>
#include<stdlib.h>

char *func(char *str)
{
int mum_cnt = 0;
char *right, *left;

if (NULL == str)
return NULL;

for (right = str; ……
[/Quote]
恩,这种方法效率比较高
_了凡_ 2011-10-02
  • 打赏
  • 举报
回复
每个数字前面都加*,那字符串长度就会增加,若字符串都是由数字构成的,那长度
就会增加一倍,下面这个是分配内存的版本:

#include <stdio.h>
#include <stdlib.h>

char *foo(char *str);

int main(int argc, char **argv)
{
char *str = "a1b2c3d4e5f6";
char *ret_str = foo(str);

printf("ret_str = %s\n", ret_str);
// Do NOT forget to free the allocated memory.
free(ret_str);
return 0;
}

char *foo(char *str)
{
char *p = NULL, *q = NULL,
*tmp_str = NULL;
int digit_count = 0;

if (NULL == str) {
return NULL;
}

for (p = str; *p != '\0'; ++p) {
if (*p >= '0' && *p <= '9') {
++digit_count;
}
}

tmp_str = (char *) malloc(sizeof(char) * (p - str + digit_count + 1));
if (NULL == tmp_str) {
fprintf(stderr, "Allocate mem for tmp_str failed.");
return NULL;
}

for (p = str, q = tmp_str; *p != '\0'; ++p, ++q) {
if (*p >= '0' && *p <= '9') {
*q++ = '*';
}
*q = *p;
}
*q = '\0';
return tmp_str;
}

Output:
ret_str = a*1b*2c*3d*4e*5f*6
we_sky2008 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 we_sky2008 的回复:]
C/C++ code


#include<stdio.h>
#include<stdlib.h>

char *func(char *str)
{
int mum_cnt = 0;
char *right, *left;

if (NULL == str)
return NULL;

for (right = str; ……
[/Quote]
while (left >= str) 改为while (left > str)

#include<stdio.h>
#include<stdlib.h>

char *func(char *str)
{
int mum_cnt = 0;
char *right, *left;

if (NULL == str)
return NULL;

//先计算共有多少个数字字符
for (right = str; *right != '\0'; ++right)
{
if ('0' <= *right && *right <= '9')
{
++mum_cnt;
}
}

left = right;
right += mum_cnt;
*right-- = 0;

//从后往前拷贝
while (left > str)
{
*right-- = *--left;
if ('0' <= *left && *left <= '9')
{
*right-- = '*';
}
}

return str;
}

int main()
{
char src[100] = "654321a1b2c3d4e5f6g123456";

printf("%s\n", func(src));

system("pause");
return 0;
}



we_sky2008 2011-10-02
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>

char *func(char *str)
{
int mum_cnt = 0;
char *right, *left;

if (NULL == str)
return NULL;

for (right = str; *right != '\0'; ++right)
{
if ('0' <= *right && *right <= '9')
{
++mum_cnt;
}
}

left = right;
right += mum_cnt;
*right-- = 0;

while (left >= str)
{
*right-- = *--left;
if ('0' <= *left && *left <= '9')
{
*right-- = '*';
}
}

return str;
}

int main()
{
char src[100] = "654321a1b2c3d4e5f6g123456";

printf("%s\n", func(src));

system("pause");
return 0;
}


mengmingtao 2011-10-02
  • 打赏
  • 举报
回复

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

char *fun(char* s){
int i,j;
int len = strlen(s);
for(i=0;i<len;i++){
if((*(s+i))>='0'&& (*(s+i))<='9'){
for(j=len;j>i;j--){
*(s+j+1) = *(s+j);
}
*(s+j+1) = *(s+j);
*(s+i) = '*';
i++;
len++;
}
}
return s;
}

int main(){
char str[100] = "1234565";
fun(str);
cout << str <<endl;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧