| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1509 人关注过本帖
标题:求解啊~~字符串插入下划线~~~
只看楼主 加入收藏
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
结帖率:83.33%
收藏
已结贴  问题点数:5 回复次数:7 
求解啊~~字符串插入下划线~~~
比如  输入:   hu  wen32 jiha 43j
      输出:    hu wen_32_ jiha _43_j

程序怎么写啊???
搜索更多相关主题的帖子: 下划线 字符串 
2011-06-15 17:32
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
还在纠结这个哪?

程序代码:
if ('0' <= s[i] && s[i] <= '9') {
    if ((s[i - 1] < '0' || s[i - 1] > '9') && s[i - 1] != '_') {
        strcpy(&s[i + 1], &s[i]);
        s[i] = '_';
    }
    if ((s[i + 1] < '0' || s[i + 1] > '9') && s[i + 1] != '_') {
        strcpy(&s[i + 2], &s[i + 1]);
        s[i + 1] = '_';
    }
    i++;
}


[ 本帖最后由 voidx 于 2011-6-15 19:39 编辑 ]
2011-06-15 17:41
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
收藏
得分:0 
回复 2楼 voidx
'strcpy' : function does not take 3 parameters
2011-06-15 17:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 3楼 huwengui
改过了,刚才那个使用 memcpy() 了,不好意思哈

上面的代码还有个小问题,又修改了下,就是 i++ 那行;

[ 本帖最后由 voidx 于 2011-6-15 18:02 编辑 ]
2011-06-15 17:51
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
收藏
得分:0 
回复 4楼 voidx
#include <stdio.h>
#include <string.h>
#include "stdlib.h"
 main()
{
 char a[100];
  gets(a);
  int len=strlen(a);
 char *p = a;
 int i,j=0;

 for(i=0;p[i]!= '\0';)
 {
  a[j++] = p[i++];
  while(p[i] == ' '&&p[i+1]==' ')     /*处理空格,保留一个空格*/
  {
   i++;
  }
 }
 a[j] = '\0';
for(i=0;a[i];i++)
{
if(a[0]>='a'&&a[0]<='z')  a[0]=a[0]-32;    /*首字母为大写*/
if(a[i]==' ') a[i+1]=a[i+1]-32; /*首字母为大写*/

/*   数字前后加下划线???*/    帮忙看看这地方的下划线  怎么写
}
puts(a);
}
2011-06-15 18:17
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
while(p[i] == ' ')    // 改成这样,因为已经保留了一个空格了
if(a[0]>='a'&&a[0]<='z')  a[0]=a[0]-32;    // 这行拿到循环外面
if(a[i]==' ') a[i+1]=a[i+1]-32; /*首字母为大写*/
// 改成下面:
if (a[i] == ' ' && a[i + 1] >= 'a' && a[i + 1] <= 'z') a[i + 1] += 32;


下划线的问题直接用我给你的代码不就行了?

[ 本帖最后由 voidx 于 2011-6-15 18:30 编辑 ]
2011-06-15 18:21
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
收藏
得分:0 
回复 6楼 voidx
图片附件: 游客没有浏览图片的权限,请 登录注册
是不是 strcpy(&a[i+2], &a[i+1]); 有问题啊
2011-06-15 19:21
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

char capitalize(char c) {
    return c >= 'a' && c <= 'z' ? c - 32 : c;
}

char is_numeric(char c) {
    return c >= '0' && c <= '9';
}

int main() {
    char s[100] = {0};
    int i = 0, j = 0;
    printf("Give me a string: ");
    gets(s);
    for (; s[j] == ' '; j++);
    for (; s[j]; i++, j++) {
        s[i] = s[j];
        if (s[j] == ' ') {
            for (; s[j] == ' '; j++);
        j--;
    }
    }
    s[i] = 0;
    s[0] = capitalize(s[0]);
    for (i = 1; s[i]; i++) {
        if (s[i - 1] == ' ' && !is_numeric(s[i])) {
            s[i] = capitalize(s[i]);
        }
        if (is_numeric(s[i])) {
            if (!is_numeric(s[i - 1]) && s[i - 1] != '_') {
                for (j = strlen(s); j >= i; j--) {
                    s[j + 1] = s[j];
                }
                s[i++] = '_';
            }
            if (!is_numeric(s[i + 1]) && s[i + 1] != '_') {
                for (j = strlen(s); j >= i; j--) {
                    s[j + 1] = s[j];
                }
                s[++i] = '_';
            }
        }
    }
    puts(s);
}


的确是 strcpy 那里的问题。
你这题让我知道了 strcpy 不能用来在一个字符串中移动它的子串。
谢谢

[ 本帖最后由 voidx 于 2011-6-15 21:38 编辑 ]
2011-06-15 21:36
快速回复:求解啊~~字符串插入下划线~~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017822 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved