注册 登录
编程论坛 C++教室

这个程序底错在哪里????

异ren 发布于 2016-03-20 13:26, 4152 次点击

# include <iostream>
using namespace std;


void fun(char* ss)
{
int i,n;
n=strlen(ss);
for(i=1;i<n;i+=2)
if(ss[i]='a'&&ss[i]<='z')
ss[i]=ss[i]-32;
else
    ss[i]=ss[i];
cout<<ss;
}
int main()
{
    fun("abc4EFg");

    return 0;
}
14 回复
#2
wengbin2016-03-20 14:42
数组做参数时传入的是指针,你用strlen()求不出原数组的长度,而只是char型变量的长度,想要用fun函数,就要修改原型,把数组长度也传递进fun函数
#3
wengbin2016-03-20 14:49
声明数组后,数组名就是一个指针,数组的下标是告诉你申请的内存块大小,要知道C和C++中是不会检查数组下标是否越界的,数组作参数时,就只是将数组名这个指针传进函数了,并没有将数组内容和大小传进去。
#4
jklqwe1112016-03-20 17:25
楼主最大的问题是没有把代码的目的及代码运行时错误的表现説清楚,贴出代码问哪错了,这是叫人猜谜。
#5
异ren2016-03-21 18:46
回复 3楼 wengbin
那应该么怎么改呢?我改了一下,还是不行.........
#6
wengbin2016-03-21 21:16
void fun(char* ss,const int n)
{
int i;
for(i=1;i<n;i+=2)
if(ss[i]='a'&&ss[i]<='z'){
ss[i]=ss[i]-32;
else
    ss[i]=ss[i];}
cout<<ss;
}
int main()
{
    fun("abc4EFg",7);

    return 0;
}
#7
jklqwe1112016-03-21 21:49
回复 6楼 wengbin
strlen函数的使用并无不妥,如此改变代码不会对原码的问题有什么改变,其实楼主的心思很难猜。
#8
wengbin2016-03-22 09:39
看那代码的意思是字符串的偶位字母变大写吧
#9
wengbin2016-03-22 12:18
程序代码:
# include <iostream>
#include <cstring>
using namespace std;


void fun(char* ss)
{
    int i=0,n=0;
    n=strlen(ss);
    for(i=1;i<n;i+=2)
    {
        if(ss[i]>='a'&&ss[i]<='z')ss[i]-=32;//你原码为的+32我不知道是什么意思,为了能跑出来,我变成了-,这样就是把偶数位处的字符小写变大写
    }
    cout<<ss;
}
int main()
{
    char a[]="abc4EFg";
    fun(a);
    //fun("abc4EFg");这种调用方式不行,因为没有传入一个可以用的行参....
    return 0;
}
#10
异ren2016-03-24 00:00
回复 7楼 jklqwe111
我错了,下次我会交代清楚地了
#11
异ren2016-03-25 18:31
以下是引用wengbin在2016-3-21 21:16:11的发言:

void fun(char* ss,const int n)
{
int i;
for(i=1;i<n;i+=2)
if(ss='a'&&ss<='z'){//这个括号是不可以用的
ss=ss-32;
else
    ss=ss;}//
cout<<ss;
}
int main()
{
    fun("abc4EFg",7);

    return 0;
}

这个程序除了语法有错误之外,我改好了语法错误,但是还是运行不了
# include <iostream>
#include <cstring>//这个头文件不是可以不要的吗?
using namespace std;
void fun(char* ss,const int n)
{
int i;
for(i=0;i<n;i+=2)
if(ss[i]='a'&&ss[i]<='z')

ss[i]=ss[i]-32;
else
    ss[i]=ss[i];
cout<<ss;
}
int main()
{
char a[]="abc4EFg";
    fun(a,8);

    return 0;
}

#12
TonyDeng2016-03-25 18:48
你到現在都沒說這個程序要幹什麽。甚至,你連錯誤現象都不說。
#13
异ren2016-03-25 19:06
回复 12楼 TonyDeng
就是上面版主说的把偶数位的小写字母转换成大写字母,如果不是字母,则按该字符输出,至于哪里错误,菜鸟我我也不知道,语法上是没有错误的,但是呢,在运行的时候就显示运行不了
#14
TonyDeng2016-03-25 19:33
程序代码:

#include <iostream>
#include <string>
#include <ctype.h>
#include <conio.h>

int main(void)
{
    std::string s("abc4EFg");

    std::cout << s << std::endl;

    for (size_t index = 1; index < s.size(); index += 2)
    {
        if (isalpha(s[index]))
        {
            s[index] = toupper(s[index]);
        }
    }

    std::cout << s << std::endl;

    _getch();
    return 0;
}
#15
wengbin2016-03-26 08:45
回复11楼,我不是后来又重写了代码嘛?第一次的就是有问题,7楼已经指出我的错误了呀。重写的在9楼……我编译过了,没什么问题呀
1