c - 如何使用整数作为索引来反转 c 中的字符串?(不使用 strlen() 或其他字符串库)
问题描述
我想使用函数反转字符串。这是我写的程序:
#include <stdio.h>
void reverse_string(char array[50]) {
int lastindex, j;
int i;
char temp;
for (j = 0; j <= 49; j++) {
if (array[j] == '\0') { \\access the index for null character
break;
}
if (j != 0) {
lastindex = j - 1; \\get last index of character string
} else {
lastindex = 0;
}
for (i = 0; i <= lastindex; i++) {
temp = array[i];
array[i] = array[lastindex];
array[lastindex] = temp;
lastindex--;
}
array[i + 1] = '\0';
}
}
int main() {
char myarray[500] = "Meglovania";
reverse_string(myarray);
printf("%s", myarray);
return 0;
}
但是,我得到了错误的输出:Me
我想知道如何在不显式使用指针的情况下反转字符串。
解决方案
尝试注释掉多余的i++
. 而且因为i
在字符串中间附近的某个地方结束,所以这不是您想要删除空字符的地方。请记住,您传递给函数的字符串已经以空值结尾。
此外,如果i == lastindex
没有必要进行交换。
//for(i=0;i<=lastindex;i++){
for(i=0;i<lastindex;i++){
temp = array[i];
array[i]= array[lastindex];
array[lastindex]=temp;
//i++;
lastindex--;
}
//array[i+1]='\0';
正如@r3mainer 指出的那样,您的代码格式很糟糕。你在另一个里面有一个循环。我不得不将整个东西粘贴到我的 IDE 中并构建它,以解决剩下的问题。这有效:
#include<stdio.h>
void reverse_string(char array[50])
{ int lastindex,j;
int i;
char temp;
for(j = 0;j<=49;j++){
if(array[j]=='\0'){
break;
}
}
if(j!=0){
lastindex = j-1;
}
else{
lastindex = 0;
}
for(i=0;i<lastindex;i++){
temp = array[i];
array[i]= array[lastindex];
array[lastindex]=temp;
lastindex--;
}
//array[i+1]='\0';
}
int main()
{
char myarray[500]="Meglovania";
reverse_string(myarray);
printf("%s",myarray);
return 0;
}
这对眼睛来说更容易:
#include<stdio.h>
int string_length(char *array)
{
int counter = 0; // Doubles as an index.
while('\0' != array[counter]) counter++;
return counter;
}
void reverse_string(char array[50])
{
int i;
char temp;
int lastIndex = string_length(array) - 1;
for(i=0;i<lastIndex;i++){
temp = array[i];
array[i]= array[lastIndex];
array[lastIndex]=temp;
lastIndex--;
}
}
int main()
{
char myarray[50]="Meglovania";
reverse_string(myarray);
printf("%s",myarray);
return 0;
}
您在反向代码中嵌入了字符串长度代码,这只是不好的做法。一个函数通常应该只做一件事并在需要其他值时调用其他函数,所以我创建了一个string_length
函数,最初使用您的代码版本,但我不能遵守它,所以也要清理它。
我希望你从这个练习中学到了一些东西。代码格式非常重要。每次在代码中输入左大括号“{”时,立即添加右大括号}
,然后在它们之间插入所需的任何代码。
推荐阅读
- google-apps-script - 如何使用谷歌应用程序脚本中的另一个函数停止一个函数?
- stream - 使用 CheckedInputStream/CheckedOutputStream 压缩/解压缩时校验和不匹配
- r - 如何对 R 执行 Wald 检验以显示参数对总体的影响?
- bash - CloudFormation UserData 模板用于在 EC2 的配置文件中写入 RDS 端点
- elasticsearch - Kibana 增强表 - 计算列
- laravel - 我正在尝试将多个图像下载为 zip 文件,但使用 laravel 7 时出错
- dynamics-crm - 从 Dynamics 365 运行自定义工作流时出现 2 分钟超时问题
- amazon-web-services - EC2上的logstash连接到ES时的403状态码
- swift - 在 Swift 5.5+ 的后台线程上使用 JSONDecoder
- flutter - 我只能得到完全包含搜索文本的结果。即使是一个拼写错误也会阻止我得到我正在寻找的东西