VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 760|回复: 7

34课字符数组能传无法改变我用的指针,求正确例子

[复制链接]
99_avatar_middle
最佳答案
1 
online_vip 发表于 2019-4-19 20:04:42 | 显示全部楼层 |阅读模式
3驿站币
34课字符数组能传无法改变我用的指针,求正确例子
下面我的代码.

void string_upper_diy(char *str, int str_len, bool b_odd_pos = true)
char *str这和 作业的char str的不同,  我用char 返回值声明函数又说返回类型不同
  1. #include <iostream>
  2. using namespace std;
  3. char sub_str(char str, int num);

  4. void string_upper_diy(char *str, int str_len, bool b_odd_pos = true)
  5. {
  6.         if (b_odd_pos)
  7.         {
  8.                 for (int idx = 0; idx < str_len; idx++)
  9.                 {
  10.                         if (idx % 2 == 0)
  11.                         {
  12.                                 /*cout << str[idx] << '---'<< idx <<'\n';*/
  13.                                 str[idx] = sub_str(str[idx], 0);

  14.                         }
  15.                         else
  16.                         {
  17.                                 str[idx] = sub_str(str[idx], 1);
  18.                         }
  19.                 }
  20.         }

  21. }
  22. char sub_str(char str, int num)
  23. {
  24.         if (num == 0)
  25.         {
  26.                 if (str >= 'a' && str <= 'z')
  27.                 {

  28.                         str -= 32;
  29.                 }

  30.         }else
  31.         {
  32.                 if (str >= 'A' && str <= 'Z')
  33.                 {
  34.                         str += 32;
  35.                 }
  36.         }
  37.         return str;
  38. }
  39. int main()
  40. {
  41.         char str[50] = "abcdADcdeFDde!@234";
  42.         string_upper_diy(str, 17);
  43.         cout << str <<'\n';
  44. }
复制代码

这是我的代码.求作业标准答案





上一篇:VS编译器点生成,只显示最新1,不显示成功1
下一篇:请问如何数组中提取数据?
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-20 18:40:06 | 显示全部楼层
算法不管你,这句是错误地:    char str[50] = "abcdADcdeFDde!@234";应改正为
char str[50];
strcpy_s(str,50,"abcdADcdeFDde!@234");
在C中,只有常量可以那样赋值。如果那样赋值,编译器就认为常量。你后面的str[idx]都是非法违例修改。
都做不下去。系统认为只有变量,才能修改,它认为这行为意味你不在写程序,是没批准在决策层
做报告。领导就直接撸你下去。后面的事都不要做了。回去反省。
34课字符数组能传无法改变我用的指针,求正确例子

99_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2019-5-2 15:03:49 | 显示全部楼层
xx_player 发表于 2019-4-20 18:40
算法不管你,这句是错误地:    char str[50] = "abcdADcdeFDde!@234";应改正为
char str[50];
strcpy_s( ...

这完全整蒙了.课程上看他讲的一直是这样赋值的,你直接给推翻了,让我们小白听谁的!
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-2 18:20:25 | 显示全部楼层
那天把你的代码粘过来,运行就异常了。查异常位置就是str[idx] =。不过今天粘过来,没有报异常了。为了验证这种初始值到底对不对,
进行了测试。
str初始值都为 0XCC.
直接=的截图
34课字符数组能传无法改变我用的指针,求正确例子


strcpy_s的截图
34课字符数组能传无法改变我用的指针,求正确例子
根据结果,两种方法都能正确初始,但初始的结果略有区别,1)不足部分填充的是0 。2)不足部分填充的0xfe

我用的VS2015.说明VS2015编译器已经支持字符串对象式赋值。就是=的那种。但这种方式
在标准C是不支持地。你用的编译器支持,用那种也没问题。
没有人再会说你错。因为不掌握编译器,无法推翻结果。
不过世事难料,等号赋值,字符串对象式赋值。编译器默认的是左填充,如果哪天变成右填充,又不知道找谁。
在printf输出时格式位加-号就从右对齐。
习惯是养成地,既然结果是对地,不想改变就不改变吧。

34课字符数组能传无法改变我用的指针,求正确例子

26_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-9 22:29:21 | 显示全部楼层
我也觉得,要使用strcpy_s函数,对字符串赋值。引号直接赋值,是存在常量区的。
32_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-9 22:43:32 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;
  3. #include <string>
  4. #include "student.h"

  5. void string_upper_diy(char *str, int str_len, bool b_odd_pos = true);
  6. void string_upper_diy(char *str, int str_len, bool b_odd_pos)
  7. {
  8.         if (b_odd_pos&&(str_len%2==0))
  9.         {
  10.                 for (int idx = 0; idx < str_len; idx += 2)
  11.                 {
  12.                         if (str[idx] >= 'a')
  13.                         {
  14.                                 str[idx] = str[idx] - ('a' - 'A');
  15.                         }
  16.                         if (str[idx+1]<'a')
  17.                         {
  18.                                 str[idx+1] = str[idx+1] + ('a' - 'A');
  19.                         }
  20.                 }
  21.         }
  22.         else if (b_odd_pos && (str_len % 2 == 1))
  23.         {
  24.                 for (int idx = 0; idx < str_len; idx += 2)
  25.                 {
  26.                         if (str[idx] >= 'a')
  27.                         {
  28.                                 str[idx] = str[idx] - ('a' - 'A');
  29.                         }
  30.                 }
  31.                 for (int idx = 1; idx < str_len; idx += 2)
  32.                 {
  33.                         str[idx] = str[idx] + ('a' - 'A');
  34.                 }
  35.         }
  36.         else if ((!b_odd_pos) && (str_len % 2 == 0))
  37.         {
  38.                 for (int idx = 0; idx < str_len; idx += 2)
  39.                 {
  40.                         if (str[idx+1] >= 'a')
  41.                         {
  42.                                 str[idx+1] = str[idx+1] - ('a' - 'A');
  43.                         }
  44.                         if (str[idx] < 'a')
  45.                         {
  46.                                 str[idx] = str[idx] + ('a' - 'A');
  47.                         }
  48.                 }
  49.         }
  50.         else if ((!b_odd_pos) && (str_len % 2 == 1))
  51.         {
  52.                 for (int idx = 0; idx < str_len; idx += 2)
  53.                 {
  54.                         if (str[idx] < 'a')
  55.                         {
  56.                                 str[idx] = str[idx] + ('a' - 'A');
  57.                         }
  58.                 }
  59.                 for (int idx = 1; idx < str_len; idx += 2)
  60.                 {
  61.                         str[idx] = str[idx] - ('a' - 'A');
  62.                 }
  63.         }

  64. }
  65. int main(int argc, char* argv[])
  66. {
  67.         char shi[] = "asdJYDcdrR";
  68.         cout << shi << endl;
  69.         string_upper_diy(shi,strlen(shi),0);
  70.         cout << shi << endl;
  71.         return 0;
  72. }
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-24 16:51

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表