| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2288 人关注过本帖
标题:怎么在每个单词字母逆序中让标点符号的位置保持不变?
只看楼主 加入收藏
Sopphhiiaa
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-12-7
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:17 
怎么在每个单词字母逆序中让标点符号的位置保持不变?
例如:
输入
I like thinking...
输出
I ekil gnikniht...
下面是我的代码:
程序代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
    
    char a[20];
    gets(a); 
    int len;
    len=strlen(a);
    char b[20][20];
    int i,j,k;
    int m[20];
    j=0;
    k=0;
    for(i=0;i<len;i++)//将输入的字符串化为二维数组 每一个单词单独占一行 
    {
        if(a[i]==' ')
        {
            j++;
            
            k=0;
            continue;
        }
        
        b[j][k]=a[i];
        k++;
        m[j]=k;
    }
    /*int t;
    for(t=0;t<j+1;t++)
    printf("%d\n",m[t]);*/
    
    int p,q;
    char c[20][20];
    char d[20];
    for(p=0;p<j+1;p++)//
    {    for(q=0;q<m[p];q++)//
        { 
        
            if(b[p][m[p]-1-q]>='a'&&b[p][m[p]-1-q]<='z'||b[p][m[p]-1-q]>='A'&&b[p][m[p]-1-q]<='Z')
            c[p][q]=b[p][m[p]-1-q];//逆序,c为逆序后的数组 
            
        }
    }
         p=0;
         while(p<j+1)
          {
            for(q=0;q<m[p];q++)
           {
           printf("%c",c[p][q]);
           }
           p++;
           printf(" ");
          }
    
    
    return 0; 
    
    
}

然后我的输出结果是这样的:
i like thinking...
i ekil    gnikniht
可以看到,标点符号没有输出且占了位置。请教大佬们我该如何修改才能显示出样例中输出的结果。
搜索更多相关主题的帖子: 输出 单词 逆序 for int 
2020-12-24 20:26
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:4 

            if(b[p][m[p]-1-q]>='a'&&b[p][m[p]-1-q]<='z'||b[p][m[p]-1-q]>='A'&&b[p][m[p]-1-q]<='Z')
          点号没有被逆序。而竟然输出空格而不是乱码,我感到诧异。

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-24 21:11
Sopphhiiaa
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-12-7
收藏
得分:0 
回复 2楼 do8do8do8
那应该是怎么改才能正确输出呀
2020-12-24 21:29
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
增加个else  处理非字母的字符   直接把非字母的字符写在后面

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-24 21:38
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
每遇到一位非字母字符,整个数组的元素位置前移一位后,把非字符字符覆盖最后一个位置

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-24 21:47
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
else {
for(j=0;j<m[p]-1; j++)
     c[p][j]=c[p][j+1];
c[p][j]=b[p][m[p]-1-q];

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-24 21:59
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1479
专家分:9035
注 册:2010-3-16
收藏
得分:4 
程序代码:
#include <stdio.h>
#include <ctype.h>

void restr(char *start, char *end)
{
    char c, *p, *q;
    p = start;
    q = end;

    unsigned int half;
    half = (q - p) / 2;

    while (p <= start + half)
    {
        c = *p;
        *p = *q;
        *q = c;

        p++;
        q--;
    }
}

int main(void)
{

    char a[20], *p, *start, *end;
    int b = 0;

    gets(a);
    p = start = end = a;

    while (*p)
    {
        if (isspace(*p) || ispunct(*p) ||*(p + 1) == '\0')
        {            
            if(b && *(p + 1) == '\0')
                end++;
            if(b)
                restr(start, end);
            b = 0;
        }
        else
        {
            if (b == 0)
                start = p;
            end = p;
            b = 1;
        }
        p++;
    }

    printf("%s\n", a);
    return 0;
}


[此贴子已经被作者于2020-12-24 23:58编辑过]

2020-12-24 22:57
Sopphhiiaa
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-12-7
收藏
得分:0 
我在原来的代码中这么加
程序代码:
if(b[p][m[p]-1-q]>='a'&&b[p][m[p]-1-q]<='z'||b[p][m[p]-1-q]>='A'&&b[p][m[p]-1-q]<='Z')
            c[p][q]=b[p][m[p]-1-q];//逆序,c为逆序后的数组 
            else {
                
                c[p][q]=c[p][q+1];
                c[p][q]=b[p][m[p]-1-q];
                }
                

然后输出的结果是
i like thinking...
i ekil ...gnikniht
              
2020-12-24 23:02
Sopphhiiaa
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-12-7
收藏
得分:0 
回复 7楼 apull
谢谢你的解答,但是标点符号的位置不能改变,您的代码运行出来的结果标点符号仍然被逆序了
2020-12-24 23:11
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
回复 8楼 Sopphhiiaa
用我的那个试试,我不是写了几行代码吗,反正我没编译,手机打的

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-24 23:13
快速回复:怎么在每个单词字母逆序中让标点符号的位置保持不变?
数据加载中...
 
   



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

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