如何使用整数作为索引在 c 中反转字符串?(不使用 strlen() 或其他字符串库)
How to reverse a string in c using integers as indices?(without the use of strlen() or other string libraries)
我想使用函数反转字符串。这是我写的程序:
#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] == '[=10=]') { \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] = '[=10=]';
}
}
int main() {
char myarray[500] = "Meglovania";
reverse_string(myarray);
printf("%s", myarray);
return 0;
}
但是,我得到了错误的输出:Me
我想知道如何在不显式使用指针的情况下反转字符串。
应该这样做
#include <stdio.h> // printf
#include <string.h> // strlen
void reverse_string(char string[], size_t len) {
if (len < 1) return;
size_t front = 0, back = len - 1;
char temp;
while (front < back) {
temp = string[front];
string[front++] = string[back];
string[back--] = temp;
}
}
int main() {
char string[500] = "sample string";
reverse_string(string, strlen(string));
printf("%s\n", string);
return 1;
}
尝试注释掉多余的 i++
。并且因为 i
在字符串中间附近的某个地方结束,所以这不是您要放置空字符的地方。请记住,您传递给函数的字符串已经以 null 结尾。
此外,如果 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]='[=10=]';
正如@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]=='[=11=]'){
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]='[=11=]';
}
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('[=12=]' != 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
函数,最初使用你的代码版本,但我就是不能遵守它,太干净了也涨了。
我希望你从这个练习中学到了一些东西。代码格式化非常重要。每次在代码中输入左大括号“{”时,立即添加右大括号 }
,然后在它们之间插入所需的任何代码。
要使用索引变量反转字符串,您可以使用从 0
开始的索引和从字符串末尾开始的另一个索引,交换这些位置的字符并递增第一个索引并递减第二个, 在这些位置不重合时进行迭代。
这是一个简单的实现:
#include <stdio.h>
char *reverse_string(char *str) {
int i = 0, j = 0;
while (str[j] != '[=10=]') {
j++;
}
while (i <-- j) {
char c = str[i];
str[i] = str[j];
str[j] = c;
i++;
}
return str;
}
int main() {
char myarray[] = "Meglovania";
printf("%s\n", reverse_string(myarray));
return 0;
}
char *reverse(char *str)
{
char *end = str, *wrk = str;
if(str && *str)
{
while(*(end + 1)) end++;
while(end > wrk)
{
char tmp = *end;
*end-- = *wrk;
*wrk++ = tmp;
}
}
return str;
}
int main(void)
{
printf("%s\n", reverse((char[]){"1234567890"}));
}
我想使用函数反转字符串。这是我写的程序:
#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] == '[=10=]') { \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] = '[=10=]';
}
}
int main() {
char myarray[500] = "Meglovania";
reverse_string(myarray);
printf("%s", myarray);
return 0;
}
但是,我得到了错误的输出:Me
我想知道如何在不显式使用指针的情况下反转字符串。
应该这样做
#include <stdio.h> // printf
#include <string.h> // strlen
void reverse_string(char string[], size_t len) {
if (len < 1) return;
size_t front = 0, back = len - 1;
char temp;
while (front < back) {
temp = string[front];
string[front++] = string[back];
string[back--] = temp;
}
}
int main() {
char string[500] = "sample string";
reverse_string(string, strlen(string));
printf("%s\n", string);
return 1;
}
尝试注释掉多余的 i++
。并且因为 i
在字符串中间附近的某个地方结束,所以这不是您要放置空字符的地方。请记住,您传递给函数的字符串已经以 null 结尾。
此外,如果 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]='[=10=]';
正如@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]=='[=11=]'){
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]='[=11=]';
}
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('[=12=]' != 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
函数,最初使用你的代码版本,但我就是不能遵守它,太干净了也涨了。
我希望你从这个练习中学到了一些东西。代码格式化非常重要。每次在代码中输入左大括号“{”时,立即添加右大括号 }
,然后在它们之间插入所需的任何代码。
要使用索引变量反转字符串,您可以使用从 0
开始的索引和从字符串末尾开始的另一个索引,交换这些位置的字符并递增第一个索引并递减第二个, 在这些位置不重合时进行迭代。
这是一个简单的实现:
#include <stdio.h>
char *reverse_string(char *str) {
int i = 0, j = 0;
while (str[j] != '[=10=]') {
j++;
}
while (i <-- j) {
char c = str[i];
str[i] = str[j];
str[j] = c;
i++;
}
return str;
}
int main() {
char myarray[] = "Meglovania";
printf("%s\n", reverse_string(myarray));
return 0;
}
char *reverse(char *str)
{
char *end = str, *wrk = str;
if(str && *str)
{
while(*(end + 1)) end++;
while(end > wrk)
{
char tmp = *end;
*end-- = *wrk;
*wrk++ = tmp;
}
}
return str;
}
int main(void)
{
printf("%s\n", reverse((char[]){"1234567890"}));
}